请帮助别人!
我有一个表View_SMS_Mark_Attendance
,其中包含
[Class] | [S_Adm_No] | [Alias], | [DateTime]
我的问题是如何像P和A一样单独计算。
Class | S_Adm_NO | Month | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Total_P | Total_A
Nur-A | 1101 | April | A | P | P | P | P | A | A | 4 | 3
Nur-A | 1102 | April | P | P | P | P | P | A | A | 5 | 2
Nur-A | 1103 | April | A | P | A | P | P | A | A | 3 | 4
要获得我的结果,我使用的是
之类的SQL查询SELECT *
FROM
(SELECT
[Class], [S_Adm_No], [Alias],
DATENAME(M, [DateTime])as [Month],
DAY([DateTime]) as [DayValue]
FROM
[View_SMS_Mark_Attendance]) AS Composite
PIVOT
(MAX([Alias])
FOR [DayValue] 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])) AS pt
LEFT JOIN
(SELECT
[Class], [S_Adm_No],
SUM(CASE WHEN [Alias] = 'P' THEN 1 ELSE 0 END) AS SumOfP,
SUM(CASE WHEN [Alias] = 'A' THEN 1 ELSE 0 END) AS SumOfA
FROM
[View_SMS_Mark_Attendance]
GROUP BY
[Class], [S_Adm_No]) AS at ON pt.[Class] = at.[Class]
AND pt.[S_Adm_No] = at.[S_Adm_No]
我希望通过使用' WHERE month&类'
请帮助别人!
答案 0 :(得分:1)
只需使用条件聚合:
SELECT [Class], [S_Adm_No], [Alias], DATENAME(MONTH, [DateTime]) as [Month],
MAX(CASE WHEN DAY([DateTime]) = 1 THEN Alias END) as [1],
MAX(CASE WHEN DAY([DateTime]) = 2 THEN Alias END) as [2],
. . .,
MAX(CASE WHEN DayValue = 31 THEN Alias END) as [31],
SUM(CASE WHEN Alias = 'P' THEN 1 ELSE 0 END) as NumPs,
SUM(CASE WHEN Alias = 'P' THEN 1 ELSE 0 END) as NumAs,
FROM View_SMS_Mark_Attendance
GROUP BY [Class], [S_Adm_No], [Alias], DATENAME(MONTH, [DateTime]);