在SQL数据库表中创建总行

时间:2014-07-01 18:59:15

标签: sql sql-server tsql

我试图创建一个在数据库中添加额外ROW的查询。

以下是我开始使用的内容:

PerfAttribAlphaID  ProductID   AsOfDate    AlphaSourceDesc   PerfAttribValue
1                 1        2014-06-30   Currency        0.00000000
2                 1        2014-06-30   Macro           50.00000000
3                 1        2014-06-30   Quantitative    10.00000000
4                 1        2014-06-30   Credit          90.00000000

以下是我试图结束的内容:

PerfAttribAlphaID  ProductID   AsOfDate    AlphaSourceDesc   PerfAttribValue
1                 1        2014-06-30   Currency        0.00000000
2                 1        2014-06-30   Macro           50.00000000
3                 1        2014-06-30   Quantitative    10.00000000
4                 1        2014-06-30   Credit          90.00000000

其中PerfAttribAlphaID是主键(bigint)并且对于表中的每一行递增1,ProductID和AsOfDate是输入参数,AlphaSourceDesc是Total,PerfAttribValue是表中所有先前行的总和。

2 个答案:

答案 0 :(得分:1)

您没有显示您的查询,所以我只是在这里猜测,但基本的想法是使用union select

之前:

select PerfAttribAlphaID, ProductID, AsOfDate, AlphaSourceDesc, PerfAttribValue
from T

后:

select PerfAttribAlphaID, ProductID, AsOfDate, AlphaSourceDesc, PerfAttribValue
from T
union 
select null, null, null,    'Total',   sum(PerfAttribValue)
from T

答案 1 :(得分:0)

您可以使用 GROUPING SETS 生成总行:

select PerfAttribAlphaID, 
ProductID, 
AsOfDate, 
case when grouping(PerfAttribValue) = 1 then 'Total' else AlphaSourceDesc end AlphaSourceDesc,  
SUM(PerfAttribValue) PerfAttribValue
from MyTable
group by grouping sets((PerfAttribAlphaID, ProductID, AsOfDate, AlphaSourceDesc, PerfAttribValue), ())

如果您有多个ProductId并希望获得每个ProductIds的小计,则可以修改此查询。 This SQL Fiddle证明了这一点。