MSSQL表:
姓名 出勤情况 次数
A 迟到 2
A 早退 1
A 旷工 3
B 迟到 1
B 早退 4
求从上表中查询下面结果的SQL语句
姓名 迟到 早退 旷工
A 2 1 3
B 1 4
MSSQL表:
姓名 出勤情况 次数
A 迟到 2
A 早退 1
A 旷工 3
B 迟到 1
B 早退 4
求从上表中查询下面结果的SQL语句
姓名 迟到 早退 旷工
A 2 1 3
B 1 4
关注让 “紫雾凌寒” 来帮你回答,本回答结合 DeepSeek
如果还有问题,请评论或点击头像私信,如果有帮助到您, 请关注、采纳、点赞
SELECT 姓名,
SUM(CASE WHEN 出勤情况 = '迟到' THEN 次数 ELSE 0 END) AS 迟到次数,
SUM(CASE WHEN 出勤情况 = '早退' THEN 次数 ELSE 0 END) AS 早退次数,
SUM(CASE WHEN 出勤情况 = '旷工' THEN 次数 ELSE 0 END) AS 旷工次数
FROM 表名
GROUP BY 姓名;
attendance_table,上述代码中使用CASE语句来根据不同的出勤情况进行条件判断,并对相应的次数进行求和,最后通过GROUP BY按姓名进行分组统计。PIVOT操作:SELECT *
FROM (
SELECT 姓名, 出勤情况, 次数
FROM attendance_table
) AS SourceTable
PIVOT (
SUM(次数)
FOR 出勤情况 IN ([迟到], [早退], [旷工])
) AS PivotTable;
DECLARE @cols NVARCHAR(MAX);
DECLARE @query NVARCHAR(MAX);
SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(出勤情况)
FROM attendance_table
FOR XML PATH('')), 1, 1, '');
SET @query = 'SELECT 姓名,' + @cols +'FROM (
SELECT 姓名, 出勤情况, 次数
FROM attendance_table
) AS SourceTable
PIVOT (
SUM(次数)
FOR 出勤情况 IN (' + @cols + ')
) AS PivotTable';
EXEC sp_executesql @query;
GROUP BY结合CASE语句进行条件求和。PIVOT操作可以使数据呈现更直观,但语法复杂。动态SQL则更具通用性,但编写难度较大。具体使用哪种方法应根据实际需求和场景来选择。请注意,以上代码中的表名attendance_table、表名需要根据实际的表名进行替换。
希望以上解答对您有所帮助。如果您有任何疑问,欢迎在评论区提出。