Return 如果在 SQL 使用 Pivot 的服务器中未找到行则为 0

Return 0 if no row found in SQL Server using Pivot

谢谢大家,也谢谢@Aaron Bertrand,你的回答解决了我的问题:) !

我正在努力寻找问题的解决方案,这是我在 SQL 服务器中的查询:

编辑:更多细节:这是我 table 中的数据类型:

identifier date status
1 20220421 have a book
2 20220421 have a pdf
3 20220421 have a pdf
4 20220421 have a book
5 20220421 have a book
6 20220421 have a book

我的查询给出了这个结果:

have a book have a pdf
4 2

所以在没有日期记录的情况下,我需要一个 returns :

的查询
have a book have a pdf
0 0

而不是:

have a book have a pdf
SELECT * FROM   
    (
      Select status from database.dbo.MyTable where date = '20220421' and status 
      in ('have a book','have a pdf')) y 
      PIVOT( Count (status) FOR y.status IN ( [have a book],[have a 
      pdf])
    ) pivot_table

此查询运行良好,但我的问题是,如果未找到任何行,我想在结果中显示 0,我尝试使用 IsNull,它在没有 Pivot 部分的情况下工作,但我无法使其工作与枢轴。

提前致谢:)

由于我们只处理给定日期的位和一行或零行,您可以添加一个并集以包含第二行零,然后取最大值(这将拉出 0 或 1来自实际行,或者当实际行不存在时来自虚拟行的零)。

SELECT [have a book] = MAX([have a book]),
       [have a pdf]  = MAX([have a pdf])
FROM
(
    SELECT [have a book], [have a pdf] FROM 
    (
      SELECT status FROM dbo.whatever 
       WHERE date = '20220421' 
         AND status IN ('have a book','have a pdf')
    ) AS src PIVOT
      ( 
         COUNT(status) FOR status IN 
         ([have a book],[have a pdf])
      ) AS pivot_table
    UNION ALL SELECT 0,0
) AS final;