sql - SQL Server 中一行中所有列值的总和

标签 sql sql-server sql-server-2008

我在 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/

相关文章:

sql - 如何根据SSIS中的用户变量值在数据流中使用if..else

database - Access Upsize到Sql Server不传输数据

sql - 排除更新 SQL Server 2008 中的行

sql - 在 Oracle 中查找下一个之后的星期五

sql-server - 从迭代记录到 GetRows() - 是否可以 rs ("id",计数器)?

sql - 使用row_number从查询中获取@@ rowcount的有效方法

SQL Server 2008存储过程结果作为列默认值

SQL Server 递归查询以显示父路径

sql - 创建表时连接字符串不记得密码

PHP mysql如何关联三个表显示不同表的输出