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;
谢谢大家,也谢谢@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;