[英]Convert data row to column and show it month wise
我有一張桌子: -
CREATE TABLE #TmpData (
RType Varchar(10),
Client VARCHAR(10),
TRequest INT,
Due INT,
Month INT
);
INSERT INTO #TmpData VALUES ('P', 'Name1',54,67,1),('P', 'Name5',5,47,1),('A', 'Name6',3,90,1 ),('A', 'Name3',4,43,1 ),('P', 'Name1',0,10,2)
,('P', 'Name2',1,78,2),('P', 'Name4',54,67,3),('P', 'Name3',5,47,3),('A', 'Name6',3,90,3 ),('P', 'Name8',3,233,3 ),('P', 'Name1',23,457,4)
,('P', 'Name7',3,6,4 ),('P', 'Name8',65,548,4 ),('P', 'Name2',3,56,5 ),('P', 'Name3',65,87,6 ),('P', 'Name4',3,56,7 ),('P', 'Name9',65,87,7 )
SELECT * FROM #TmpData
我想將其數據行明智地轉換為列並按月顯示。 我附上了我需要的結果集的屏幕截圖。
例如,我已經服用了7個月,但最長可達12個月。
請幫忙。
謝謝
您可以嘗試使用帶有SUM
函數的CASE WHEN
。
CASE WHEN
比較month
,然后SUM
是TRequest
或Due
group by
由
RType
, Client
SELECT RType,
Client,
SUM(CASE WHEN Month = 1 THEN TRequest ELSE 0 END) 'Jan Totle',
SUM(CASE WHEN Month = 1 THEN Due ELSE 0 END) '#of Request',
SUM(CASE WHEN Month = 2 THEN TRequest ELSE 0 END) 'Feb Totle',
SUM(CASE WHEN Month = 2 THEN Due ELSE 0 END) '#of Request',
SUM(CASE WHEN Month = 3 THEN TRequest ELSE 0 END) 'March Totle',
SUM(CASE WHEN Month = 3 THEN Due ELSE 0 END) '#of Request',
SUM(CASE WHEN Month = 4 THEN TRequest ELSE 0 END) 'April Totle',
SUM(CASE WHEN Month = 4 THEN Due ELSE 0 END) '#of Request',
SUM(CASE WHEN Month = 5 THEN TRequest ELSE 0 END) 'May Totle',
SUM(CASE WHEN Month = 5 THEN Due ELSE 0 END) '#of Request',
SUM(CASE WHEN Month = 6 THEN TRequest ELSE 0 END) 'June Totle',
SUM(CASE WHEN Month = 6 THEN Due ELSE 0 END) '#of Request',
SUM(CASE WHEN Month = 7 THEN TRequest ELSE 0 END) 'July Totle',
SUM(CASE WHEN Month = 7 THEN Due ELSE 0 END) '#of Request',
SUM(CASE WHEN Month = 8 THEN TRequest ELSE 0 END) 'Aug Totle',
SUM(CASE WHEN Month = 8 THEN Due ELSE 0 END) '#of Request',
SUM(CASE WHEN Month = 9 THEN TRequest ELSE 0 END) 'Sep Totle',
SUM(CASE WHEN Month = 9 THEN Due ELSE 0 END) '#of Request',
....
FROM TmpData
GROUP BY RType,
Client
編輯
如果要使month
列動態,可以使用動態數據透視表。
DECLARE @cols AS NVARCHAR(MAX),
@Pivotcols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SET @Pivotcols = STUFF((SELECT DISTINCT
',SUM(CASE WHEN Month = ' + CAST(Month AS VARCHAR(5)) + ' THEN TRequest ELSE 0 END) as ''' + FORMAT(DATEADD(mm,Month,'1900-01-01'),'MMM') + ' Totle ''',
',SUM(CASE WHEN Month = ' + CAST(Month AS VARCHAR(5)) + ' THEN Due ELSE 0 END) as ''' + FORMAT(DATEADD(mm,Month,'1900-01-01'),'MMM') + ' Totle '''
FROM TmpData
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'');
set @query = 'SELECT RType,Client, '+ @Pivotcols + ' FROM TmpData GROUP BY RType,Client'
execute(@query)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.