簡體   English   中英

我如何在SQL中的樞軸內使用大小寫

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM