Tsql 如何对组进行求和并在单独的列中提供总计?

Tsql 如何对组进行求和并在单独的列中提供总计?,tsql,group-by,sum,Tsql,Group By,Sum,我研究这个问题已经有一段时间了,虽然我知道我可以在LINQ做这个程序。我开始考虑,如果这是一个不同的大型数据集,那么解决方案将具有可扩展性。我正在积累使用SQL的经验,相信有一种方法可以在不执行插入的情况下获得结果 我拥有的数据如下所示: ids type total A01 x 1 A01 x 2 A01 x 3 A01 y 4 B01 y 2 B01 x 3 B01 y 1 C01 x 1 C01 y 2 C01 x 5 C01 y 6 i

我研究这个问题已经有一段时间了,虽然我知道我可以在LINQ做这个程序。我开始考虑,如果这是一个不同的大型数据集,那么解决方案将具有可扩展性。我正在积累使用SQL的经验,相信有一种方法可以在不执行插入的情况下获得结果

我拥有的数据如下所示:

ids type    total
A01 x   1
A01 x   2
A01 x   3
A01 y   4
B01 y   2
B01 x   3
B01 y   1
C01 x   1
C01 y   2
C01 x   5
C01 y   6
id  x total y total
A01 6   4
B01 3   3
C01 6   8
我想要的是如下所示的数据:

ids type    total
A01 x   1
A01 x   2
A01 x   3
A01 y   4
B01 y   2
B01 x   3
B01 y   1
C01 x   1
C01 y   2
C01 x   5
C01 y   6
id  x total y total
A01 6   4
B01 3   3
C01 6   8
我的信仰错了吗

  ...
  SUM(CASE type WHEN'x' THEN total ELSE 0 END),
  SUM(CASE type WHEN 'y' THEN total ELSE 0 END)
   ...
  Group by
      Id
抱歉,很难在电话中给出完整答案


抱歉,很难在电话上给出完整答案

这称为数据透视表,有多种方法可以实现

如果您使用的是SQL Server 2005或更高版本,
PIVOT
操作符()是一个简洁的选项:

select id, [x], [y]
from temp d
  PIVOT ( sum(total) for type in ([x],[y]) ) p

这称为透视表,有很多方法可以实现它

如果您使用的是SQL Server 2005或更高版本,
PIVOT
操作符()是一个简洁的选项:

select id, [x], [y]
from temp d
  PIVOT ( sum(total) for type in ([x],[y]) ) p

我想你要算一个总数。这是正确的格式,但“总计”不起作用。@mark sqldev:conditional sum是必需的。为什么要计算总数?我明白了,你已经得到了,数据在我看来就像一个ID。你是对的(+1)我想你要计算总数。这是正确的格式,但“总计”不起作用。@mark sqldev:conditional sum是必需的。为什么是计数之和?我明白了,你已经知道了,数据在我看来就像一个ID。你是对的(+1)