sql server 2008 r2 - 多列,每列都有因变量的总和

Posted

技术标签:

【中文标题】sql server 2008 r2 - 多列,每列都有因变量的总和【英文标题】:sql server 2008 r2 - multiple columns each with sum on dependent variable 【发布时间】:2018-11-29 16:29:11 【问题描述】:

我正在尝试创建一个查询,该查询将在指定时间范围内汇总美元金额并按各种因素分组。为了清楚起见,我尽可能地精简了表格,但实际上有 20 个 code1、50 个 code2 和 15 个标识符(每个标识符都有自己的结果列)

表 t

code1      code2     date          identifier     dollars
A          a         11/22/18          1             3
B          a         11/23/18          1             4
A          b         11/24/18          1             5
B          b         11/25/18          1             6
A          a         11/22/18          2             7
B          a         11/23/18          2             8
A          b         11/24/18          2             9
B          b         11/25/18          2             10

想要的输出

code1    code2     identifier1_sum     identifier2_sum
A        a         3                   7
B        a         4                   8
A        b         5                   9
B        b         6                   10

我似乎无法正确得出分组和求和。任何帮助,将不胜感激。谢谢。

【问题讨论】:

这里没有任何真正的聚合......至少对于您的示例数据。您只是在旋转数据。在您的真实数据中,您需要聚合吗?我问是因为如果有很多标识符(即向前移动的标识符将超过原来的 15 个),您将需要一个动态枢轴,因为动态条件聚合并不那么容易。否则,您可以创建 15 个条件聚合列。 【参考方案1】:

您可以在这里使用条件聚合:

SELECT
    code1,
    code2,
    SUM(CASE WHEN identifier = 1 THEN dollars ELSE 0 END) AS identifier1_sum,
    SUM(CASE WHEN identifier = 2 THEN dollars ELSE 0 END) AS identifier2_sum
FROM yourTable
GROUP BY
    code1,
    code2;

Demo

【讨论】:

以上是关于sql server 2008 r2 - 多列,每列都有因变量的总和的主要内容,如果未能解决你的问题,请参考以下文章

在SqlServer2008R2中,根据分隔符把一列的值切割成多列

基于 SQL Server 中的一列透视多列

如何在 SQL Server 2008 R2 表中添加“上次更新”列?

SQL Server 2008r2 提交性能问题

如何在 Sql Server 2008 R2 存储过程中搜索字符串?

如何在 sql server 2008r2 中将行名更改为列名