[英]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.