множественный столбец в SQL Server - PullRequest
0 голосов
/ 24 июня 2019

У меня есть проблема с результатом запроса, например enter image description here

это то, что я пробовал, но не совсем то, что я имею в виду

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  

1 Ответ

0 голосов
/ 24 июня 2019

Вы можете использовать условное агрегирование и попробовать что-то по этому коду:

 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] фактически является значением даты, и вы хотите, чтобы выходные столбцы имели имя после некоторых значений даты (непредсказуемо)псевдоним столбца) в вашем наборе, вы также должны создать это динамически.

...