我在 SQL Server 中有一个包含 34 列的表。
我需要对 SQL Server 中一行中的所有列值求和。
表:[CALEN]
列:
YEAR_ | MONTH_ |D1 | D2 | D3 | D4 | D5 .... | D31 | Days
------------------------------------------------------------
1392 | 12 | 1 | 1 | 2 | 1 | 4 ... | 0 | 29
我想要具有 1 个值的计算计数列计算此查询:
select [All_column value is 1 and Start With D]
FROM [CALEN]
WHERE YEAR_ = 1392 and MONTH_ = 12
最佳答案
您需要取消旋转表格:
SELECT YEAR_, MONTH_, DAY_, COUNT_
FROM (SELECT * FROM [CALEN] WHERE YEAR_ = 1392 and MONTH_ = 12) CALEN_FILTER
UNPIVOT (COUNT_ FOR DAY_ IN (D1, D2, D3, D4, D5, D6, D7, D8, D9, D10,
D11, D12, D13, D14, D15, D16, D17, D18, D19,
D20, D21, D22, D23, D24, D25, D26, D27, D28, D29,
D30, D31)) AS CALEN_UNPIVOTED
然后您可以轻松地进行通用聚合查询,也许更容易将上面的查询放入 CTE 中,例如
WITH CALEN_U (YEAR_, MONTH_, DAY_, COUNT_) AS (
SELECT YEAR_, MONTH_, DAY_, COUNT_
FROM (SELECT * FROM [CALEN] WHERE YEAR_ = 1392 and MONTH_ = 12) CALEN_FILTER
UNPIVOT (COUNT_ FOR DAY_ IN (D1, D2, D3, D4, D5, D6, D7, D8, D9, D10,
D11, D12, D13, D14, D15, D16, D17, D18, D19,
D20, D21, D22, D23, D24, D25, D26, D27, D28, D29,
D30, D31)) AS CALEN_UNPIVOTED
)
SELECT YEAR_, MONTH_, COUNT(DAY_)
FROM CALEN_U
WHERE COUNT_ = 1
GROUP BY YEAR_, MONTH_
编辑:参见SQLFiddle ,使用10天。
关于sql - SQL Server 中一行中所有列值的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22434651/