如何在不指定所有列名的情况下对SQL中的列中的所有值进行求和?

时间:2017-03-18 11:18:18

标签: sql sql-server

如何对列中的行进行求和?

我有一个运行查询的输出表output table。输出只是一行和多列。我希望能够将所有这些值相加,而无需指定每个列名。我怎么能这样做?

我已经使用聚合函数COUNT来获取上面的数据,我相信这意味着我无法在其周围包装另一个聚合函数。

当前查询的结构是:

USE <SOME DM>
SELECT 
   COUNT (CASE WHEN ...)
   COUNT (CASE WHEN ...)
   ...
FROM <SOME TABLE>

我正在使用 MS SQL Server 2012

1 个答案:

答案 0 :(得分:2)

借助一点XML和一个CROSS APPLY

Declare @YourTable table (ID int,EEE int,EESI int,EETPL int)
Insert into @YourTable values
(1,10,20,30),
(2,40,50,60)

Select A.ID
      ,C.*
 From  @YourTable A
 Cross Apply (Select XMLData=cast((Select A.* For XML RAW) as xml)) B
 Cross Apply (
                Select Total = Sum(Value)
                      ,Min   = Min(Value)
                      ,Max   = Max(Value)
                      ,Avg   = Avg(Value)
                 From  (
                        Select Value  = attr.value('.','int')          --<< Change to proper data type
                         From  B.XMLData.nodes('/row') as A(r)
                         Cross Apply A.r.nodes('./@*') AS B(attr)
                         Where attr.value('local-name(.)','varchar(100)') not in ('ID','OtherCols2Exclude')      --<< Field Name is case sensitive
                       ) S
             ) C

返回(仅为了好玩而添加最小/最大/平均值)

ID  Total   Min   Max   Avg
1   60      10    30    20
2   150     40    60    50