[英]How can i use case within the pivot in sql
我有以下查詢輸出使用數據透視,我想將空值更改為零。該怎么做? 查詢:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME([TypeDescription])
from tbReadingType
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT *
FROM (
select Rt.TypeDescription,Rc.Amount as Amount,Rc.FinancialYearID,Rc.ParentID
from tbRunningCost Rc join tbReadingType Rt on
Rc.ReadingTypeID=Rt.ReadingTypeID group by Rt.TypeDescription,Rc.FinancialYearID,Rc.Quantity,Rc.ReadingTypeID ,Rc.ParentID ,Amount
) AS src
PIVOT
(
SUM(Amount)
FOR TypeDescription IN ('+@cols+' )
)AS pvt'
execute(@query)
輸出:
FinancialYearID |ParentID |Aerobic Count |Building Cleaning |Cold Water (Temperature) |Electricity Meter | Gas Meter |Gas Oil |Grounds Maintenance
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
22 |245 |NULL |NULL |NULL |NULL | NULL |NULL |NULL
20 |247 |NULL |NULL |NULL |NULL | 548 |NULL |NULL
20 |250 |NULL |NULL |NULL |1 | NULL |NULL |NULL
21 |250 |NULL |NULL |NULL |NULL | NULL |NULL |NULL
22 |250 |NULL |NULL |NULL |NULL | NULL |NULL |NULL
20 |254 |NULL |NULL |NULL |15455 | NULL |NULL |NULL
20 |256 |NULL |NULL |NULL |403 | 560 |NULL |NULL
21 |256 |NULL |NULL |NULL |NULL | NULL |NULL |NULL
22 |256 |NULL |581.087 |NULL |NULL | NULL |NULL |581.087
20 |257 |NULL |NULL |NULL |92792 | 1413 |NULL |NULL
21 |257 |NULL |NULL |NULL |NULL | NULL |NULL |NULL
22 |257 |NULL |NULL |NULL |NULL | NULL |NULL |NULL
21 |262 |NULL |NULL |NULL |NULL | NULL |NULL |NULL
22 |262 |NULL |NULL |NULL |NULL | NULL |NULL |NULL
22 |263 |NULL |377.245 |NULL |NULL | NULL |NULL |NULL
20 |264 |NULL |NULL |NULL |NULL | NULL |NULL |NULL
20 |265 |NULL |NULL |NULL |34427 | NULL |NULL |NULL
22 |266 |NULL |360 |NULL |NULL | NULL |NULL |NULL
20 |267 |NULL |NULL |NULL |NULL | NULL |NULL |NULL
21 |267 |NULL |NULL |NULL |NULL | NULL |NULL |NULL
22 |267 |NULL |NULL |NULL |NULL | NULL |NULL |NULL
在沒有樣本數據和預期結果的情況下,這是一個盲目的猜測,但我認為這將滿足您的需求。 如果沒有,那么很可能會帶您走上正確的道路,您最好的朋友將幫助您到達終點:
DECLARE @SQL nvarchar(MAX);
SET @SQL = N'SELECT Rc.Financial,' + NCHAR(10) + NCHAR(13) +
N' Rc.ParentID,' + NCHAR(10) + NCHAR(13) +
STUFF((SELECT DISTINCT
N',' + NCHAR(10) + NCHAR(13) +
N' SUM(CASE Rt.TypeDescription WHEN ' + QUOTENAME(Rt.TypeDescription,'''') + N' THEN Amount ELSE 0 END) AS ' + QUOTENAME(Rt.[TypeDescription])
FROM tbReadingType
FOR XML PATH(N''),TYPE).value('.','nvarchar(MAX)'),1,3,N'') +
N'FROM tbRunningCost Rc' + NCHAR(10) + NCHAR(13) +
N' JOIN tbReadingType Rt ON Rc.ReadingTypeID=Rt.ReadingTypeID' + NCHAR(10) + NCHAR(13) +
N'GROUP BY Rc.FinancialYearID,' + NCHAR(10) + NCHAR(13) +
N' Rc.ParentID;';
PRINT @SQL; --your best friend
EXEC sp_executesql @SQL;
祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.