簡體   English   中英

用於空白數據的SQL Pivot表

[英]SQL Pivot table for Blank data

以下是我的查詢以生成透視結果:

SELECT '# of Corrective Actions open and overdue' as [Corrective Actions breakdown], 
[405],
[2865],
[3142],
[405]+[2865]+[3142] as [Total]
FROM
(Select il.Locationid , ca.CorrectiveActionsid, il.locOrder, ca.isDeleted caDeleted, i.isDeleted iDeleted, i.CompanyId companyid,ca.CADateBy, ca.Status  from IncidentLocation il inner join incident i on il.IncidentId = i.IncidentId 
inner join CorrectiveActions ca on i.IncidentId = ca.IncidentId  
) AS SourceTable
PIVOT
(
COUNT(CorrectiveActionsid)
FOR LocationId IN ([405],[2865],[3142])
) PivotTable 

where locOrder = 0 and caDeleted =0 and iDeleted = 0 and companyId = 210
and CADateBy <= '2013-01-01'  and [Status] = 'Open'

我在想空白數據計數應該返回o。 但是我什么都沒有。 請指導我我在做什么錯,我應該怎么做才能使所有計數值都為零而不是空白。

看起來您的查詢沒有返回任何行,您可以像這樣解決它(我沒有解決查詢的其他部分,只是想向您顯示一種解決方法):

select
    A.[Corrective Actions breakdown],
    coalesce([405], 0) as [405],
    coalesce([2865], 0) as [2865],
    coalesce([3142], 0) as [3142],
    coalesce([405], 0) + coalesce([2865], 0) + coalesce([3142], 0) as [Total]
from (select '# of Corrective Actions open and overdue' as [Corrective Actions breakdown]) as A
    outer apply (
   SELECT
        [405],
        [2865],
        [3142]
   FROM
        (Select il.Locationid , ISNULL(ca.CorrectiveActionsid, 0) AS CorrectiveActionsid, il.locOrder, ca.isDeleted caDeleted, i.isDeleted iDeleted, i.CompanyId companyid,ca.CADateBy, ca.Status  from IncidentLocation il inner join incident i on il.IncidentId = i.IncidentId 
        inner join CorrectiveActions ca on i.IncidentId = ca.IncidentId  
        ) AS SourceTable
   PIVOT
        (
        COUNT(CorrectiveActionsid)
        FOR LocationId IN ([405],[2865],[3142])
        ) PivotTable 
        where locOrder = 0 and caDeleted =0 and iDeleted = 0 and companyId = 210
    and CADateBy <= '2013-01-01'  and [Status] = 'Open'
    ) as p

我希望count()返回0。如果沒有,則可以嘗試使用coalesce()

coalesce([405], 0) as [405]

在SQL Server中,COUNT將忽略NULL值。 就是說,在要聚合的列上使用ISNULL函數。

   SELECT '# of Corrective Actions open and overdue' as [Corrective Actions breakdown], 
        [405],
        [2865],
        [3142],
        [405]+[2865]+[3142] as [Total]
   FROM
        (Select il.Locationid , ISNULL(ca.CorrectiveActionsid, 0) AS CorrectiveActionsid, il.locOrder, ca.isDeleted caDeleted, i.isDeleted iDeleted, i.CompanyId companyid,ca.CADateBy, ca.Status  from IncidentLocation il inner join incident i on il.IncidentId = i.IncidentId 
        inner join CorrectiveActions ca on i.IncidentId = ca.IncidentId  
        ) AS SourceTable
   PIVOT
        (
        COUNT(CorrectiveActionsid)
        FOR LocationId IN ([405],[2865],[3142])
        ) PivotTable 

   where locOrder = 0 and caDeleted =0 and iDeleted = 0 and companyId = 210
        and CADateBy <= '2013-01-01'  and [Status] = 'Open'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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