【发布时间】:2022-08-18 23:46:09
【问题描述】:
我想将此 PIVOT 转换为 CASE WHEN,因为我读到 PIVOT 对大型数据库很慢。 可能吗? 我尝试转换它但失败了,它显示所有 cmdocumentdefn.code COUNT 是 50。我想按工作日计算代码,即
MON TUE WED .... SUN
8 2 4 1
查询是:
SELECT * FROM
(SELECT
cmdocumentdefn.code, cmdocumentdefn.description \'description\',
CASE DatePart(weekday,cmrevisionaddress.issueddate)
WHEN 1 THEN \'SUN\'
WHEN 2 THEN \'MON\'
WHEN 3 THEN \'TUE\'
WHEN 4 THEN \'WED\'
WHEN 5 THEN \'THU\'
WHEN 6 THEN \'FRI\'
WHEN 7 THEN \'SAT\'
END \'dayx\'
FROM cmdocumentdefn
INNER JOIN
cmdocument
ON cmdocumentdefn.cmdocumentdefn = cmdocument.cmdocumentdefn
INNER JOIN cmrevisionaddress
ON cmdocument.cmdocument = cmrevisionaddress.cmdocument WHERE cmdocumentdefn.code = \'AF\') x
PIVOT(COUNT(dayx) FOR dayx IN([MON],[TUE],[WED],[THU],[FRI],[SAT],[SUN])) pvt
-
SELECT COUNT(CASE WHEN (CASE DatePart(weekday,cmrevisionaddress.issueddate) WHEN 1 THEN \'SUN\' WHEN 2 THEN \'MON\' WHEN 3 THEN \'TUE\' WHEN 4 THEN \'WED\' WHEN 5 THEN \'THU\' WHEN 6 THEN \'FRI\' WHEN 7 THEN \'SAT\' END) = \'MON\' THEN \'MON\' ELSE \'\' END) AS MON ...我不是获得正确的 COUNT,它不是每个工作日的计数
-
您能否提供示例数据和预期结果?
-
MON、TUE、WED 及其下方的标题是计数的。计数前的代码说明。我希望你明白我在说什么。我无法在此处格式化我的答案。
标签: sql sql-server pivot case