Я пытаюсь настроить следующий вывод для сводной таблицы, но я борюсь, и Distinct и DatePart (преобразования данных) влияют на него.(Я должен использовать DatePart, datetrunc () мне не доступен).
ОРИГИНАЛЬНЫЙ
SELECT DISTINCT (DatePart(Week, S.Date_)) AS Week, T.NAME,SUM([Call Count]) AS TotalCallCount
FROM Sched S LEFT JOIN
SchedTy T
ON S.schedTy_Id = T.id INNER JOIN
Events a
ON a.[Event Id] = s.id
WHERE [Call Count] > 0 AND S.Status_id > 0 AND a.DATE BETWEEN '1/1/2019' AND '1/1/2020'
GROUP BY T.Name, DatePart(Week, S.Date_)
ОРИГИНАЛЬНЫЙ ВЫХОД
Week EventType TotalCallCount
1 Public Holiday 6
3 B 1
3 P 3
3 R 9
4 Rec 12
4 R 3
5 P 3
5 R 15
6 Rec 18
7 P 3
7 Rec 6
7 R 12
8 B 1
8 P 6
8 R 18
9 B 1
9 CDM 3
9 P 6
9 R 15
10 OP 3
ЖЕЛАЕМЫЙ ВЫХОД (ИЛИ)
Wk1 Wk2 Wk3 Wk4
Public Holiday
R
P
Rec
ИЛИ
Public Holiday R P Rec
Wk1
Wk2
Wk3
Wk4
Я пытался: Попытка 1 DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR (MAX) SELECT @cols = STUFF((SELECT ‘,’ + DISTINCT (DatePart(Week, S.Date_))FROM Sched S ORDER By S.Date_ FOR XML PATH(‘’),TYPE).value(‘.’‘NVARCGAR(MAX)’),1,1,’’) Set @query = ‘SELECT T.Name AS EventType,’ + @cols FROM ( SELECT T.Name, S.Date, [Call Count] FROM Sched S LEFT JOIN SchedTy T ON S.schedTy_Id = T.id INNER JOIN Events a ON a.[Event Id] = s.id WHERE [Call Count] > 0 AND S.Status_id > 0 AND a.DATE BETWEEN '1/1/2019'AND '1/1/2020') PIVOT(sum([Call Count]) FOR s.Date_ in ('' + @cols + '')) p Execute(@query)
Попытка 2 SELECT T.Name, [1] AS Wk1, [2] AS Wk2, [3] AS Wk3, [4] AS Wk4, [5] AS Wk5, [6] AS Wk6, [7] AS Wk7, [8] AS Wk8, [9] AS Wk9, [10] AS Wk10, [11] AS Wk11, [12] AS Wk12, [13] AS Wk13, [14] AS Wk14, [15] AS Wk15, [16] AS Wk16, [17] AS Wk17, [18] AS Wk18, [19] AS Wk19, [20] AS Wk20, [21] AS Wk21, [22] AS Wk22, [23] AS Wk23, [24] AS Wk24, [25] AS Wk25, [26] AS Wk26, [27] AS Wk27, [28] AS Wk28, [29] AS Wk29, [30] AS Wk30, [31] AS Wk31, [32] AS Wk32, [33] AS Wk33, [34] AS Wk34, [35] AS Wk35, [36] AS Wk36, [37] AS Wk37, [38] AS Wk38, [39] AS Wk39, [40] AS Wk40, [41] AS Wk41, [42] AS Wk42, [43] AS Wk43, [44] AS Wk44, [45] AS Wk45, [46] AS Wk46, [47] AS Wk47, [48] AS Wk48, [49] AS Wk49, [10] AS Wk50, [51] AS Wk51, [52] AS Wk52 FROM (SELECT DISTINCT (DatePart(Week, S.Date_)) AS Week, T.NAME, ([Call Count]) FROM Sched S LEFT JOIN SchedTy T ON S.schedTy_Id = T.id INNER JOIN Events a ON a.[Event Id] = s.id WHERE [Call Count] > 0 AND S.Status_id > 0 AND a.DATE BETWEEN '1/1/2019' AND '1/1/2020') AS TotalCallCount PIVOT (SUM([Call Count]) FOR(DatePart(Week, S.Date_)) IN [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14], [15], [16], [17], [18], [19], [20], [21], [22], [23], [24], [25], [26], [27], [28], [29], [30], [31], [32], [33], [34], [35], [36], [37], [38], [39], [40], [41], [42], [43], [44], [45], [46], [47], [48], [49], [50], [51], [52])AS pvt