我有下一個資料
| 用戶 | 日 |
|---|---|
| 用戶 1 | 周一 |
| 用戶 2 | 周一 |
| 用戶 3 | 周一 |
| 用戶 2 | 周二 |
| 用戶 3 | 周二 |
我正在尋找將產生下一個結果的查詢
| 用戶 | 周一 | 周二 |
|---|---|---|
| 用戶 1 | 1 | 0 |
| 用戶 2 | 1 | 1 |
| 用戶 3 | 1 | 1 |
uj5u.com熱心網友回復:
您可以使用如下所示的樞軸;
WITH q AS (
SELECT aUser = 'User1', aDay = 'mon', aCount = 1
UNION ALL SELECT 'User1','mon',1
UNION ALL SELECT 'User1','mon',1
UNION ALL SELECT 'User2','mon',1
UNION ALL SELECT 'User3','tue',1
UNION ALL SELECT 'User2','wed',1
UNION ALL SELECT 'User3','thu',1
UNION ALL SELECT 'User2','thu',1
UNION ALL SELECT 'User2','thu',1
UNION ALL SELECT 'User2','mon',1
)
SELECT aUser
, mon = ISNULL(mon,0)
, tue = ISNULL(tue,0)
, wed = ISNULL(wed,0)
, thu = ISNULL(thu,0)
, fri = ISNULL(fri,0)
, sat = ISNULL(sat,0)
, sun = ISNULL(sun,0)
FROM (
SELECT *
FROM q
) s
PIVOT (sum(aCount) FOR aDay IN (mon,tue,wed,thu,fri,sat,sun)) pvt

uj5u.com熱心網友回復:
您可以使用 PIVOT 更改帶列的行:
就這兩天:
SELECT *
FROM (
SELECT [day], [user]
FROM table1
) as s
PIVOT
(
count([day])
FOR [day] IN (Monday, Tuesday)
)AS pvt
一周中的所有日子:
SELECT *
FROM (
SELECT [day], [user]
FROM table1
) as s
PIVOT
(
count([day])
FOR [day] IN (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday)
)AS pvt
uj5u.com熱心網友回復:
我使用條件聚合方法比 PIVOT 方法更好,因為我覺得它的語法不那么復雜,限制更少(而且效率也不差)。
select [User],
SUM(case when Day = 'Monday' then 1 else 0 end) Monday,
SUM(case when Day = 'Tuesday' then 1 else 0 end) Tuesday
from YourTable
group by [User]
順便說一句,您不應該將其User用作欄位名稱,因為它是一個保留字。
DBFiddle:https ://dbfiddle.uk/ ? rdbms = sqlserver_2019 & fiddle = 1f7d06eaa4ac8f23498a71ff552a6a4f
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/361375.html
下一篇:如何將整數陣列決議為json
