将记录转换为具有分组的列

时间:2013-09-19 16:06:41

标签: sql sql-server tsql

我的SQL Server数据库中有这个查询:

Date        Type        Amount  
1392/06/21  Ticket      1350000    
1392/06/22  Free        9650000  
1392/06/22  Market      10820000  
1392/06/22  Ticket      1050000  
1392/06/21  Market      10040000  
1392/06/20  Free        11750000  
1392/06/20  Ticket      960000  
1392/06/21  Free        13050000  
1392/06/20  Market      9220000  

我想把它投到这个:

Date            Ticket      Free        Market  
1392/06/20      960000      11750000    9220000  
1392/06/21      1350000     13050000    10040000  
1392/06/22      1050000     9650000     10820000  

我能想到的唯一解决方案是花费很长时间才能读取我的.net应用程序的第一个查询,然后使用foreach循环将其分组到那里,但我宁愿学习基本解决方案T-SQL提供的。

有没有人有任何线索在T-SQL中这样做?

2 个答案:

答案 0 :(得分:3)

作为Pivot命令的替代方法,您可以执行以下操作:

SELECT Date, 
       SUM(CASE WHEN Type = 'Ticket' THEN Amount ELSE 0 END) AS Ticket,
       SUM(CASE WHEN Type = 'Market' THEN Amount ELSE 0 END) AS Market,
       SUM(CASE WHEN Type = 'Free' THEN Amount ELSE 0 END) AS Free
FROM YourTable
GROUP BY Date

答案 1 :(得分:3)

您正在处理的是TSQL Pivot命令的经典案例。

请查看http://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx