【问题标题】:multiple column pivot in sql serversql server 中的多列数据透视
【发布时间】:2019-06-24 09:06:31
【问题描述】:

我有一些关于如何使查询结果像这样的问题

这是我尝试过的,但与我的意思不完全相同

CREATE TABLE #dta  
(  
 Data [nvarchar](max),  
 Date [varchar] (12) ,  
 GR [int]  ,
 Refund [int]  ,
 Sales [int]  ,
)  

 INSERT INTO #dta  
 SELECT 'asd',1,10,0,0 UNION ALL  
 SELECT 'asd',2,0,0,4 UNION ALL  
 SELECT 'asd',3,4,1,1 UNION ALL  
 SELECT 'qwe',1,2,0,0 UNION ALL  
 SELECT 'qwe',3,0,0,1 UNION ALL  
 SELECT 'zxc',1,0,0,5 UNION ALL  
 SELECT 'zxc',2,4,0,1 UNION ALL  
 SELECT 'zxc',3,0,1,5 


--Only for sales
SELECT data, [1],[2],[3] FROM   
(SELECT data, [date] , Sales FROM #dta )Tab1  
PIVOT  
(  
SUM(Sales) FOR [date] IN ([1],[2],[3])) AS Tab2  
ORDER BY Tab2.Data  

【问题讨论】:

标签: sql-server pivot-table


【解决方案1】:

您可以使用 条件聚合 并尝试以下代码:

 SELECT t.[Data]
       ,MAX(CASE WHEN t.[Date]=1 THEN t.Sales END) AS [Sales_Date_1]
       ,MAX(CASE WHEN t.[Date]=1 THEN t.Refund END) AS [Refund_Date_1]
       ,MAX(CASE WHEN t.[Date]=1 THEN t.GR END) AS [GR_Date_1]
       ,MAX(CASE WHEN t.[Date]=2 THEN t.Sales END) AS [Sales_Date_2]
       ,MAX(CASE WHEN t.[Date]=2 THEN t.Refund END) AS [Refund_Date_2]
       ,MAX(CASE WHEN t.[Date]=2 THEN t.GR END) AS [GR_Date_2]
       ,MAX(CASE WHEN t.[Date]=3 THEN t.Sales END) AS [Sales_Date_3]
       ,MAX(CASE WHEN t.[Date]=3 THEN t.Refund END) AS [Refund_Date_3]
       ,MAX(CASE WHEN t.[Date]=3 THEN t.GR END) AS [GR_Date_3]
 FROM #dta t
 GROUP BY t.[Data];

如果t.[Date] 的计数(在您的示例数据中为 1 到 3)不限于已知最大值,则您必须动态创建语句。

如果您的 t.[Date] 列实际上是一个日期值,并且您希望在您的集合中的某些日期值(不可预测的列别名)之后命名您的输出列,您也必须动态创建它。 p>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    相关资源
    最近更新 更多