通过 SQL Pivot 将“NULL”值替换为“0”

Posted

技术标签:

【中文标题】通过 SQL Pivot 将“NULL”值替换为“0”【英文标题】:Replace "NULL" values to "0" via SQL Pivot 【发布时间】:2021-01-12 00:29:36 【问题描述】:

美好的一天!我被我的查询困住了。我想将我的 NULL 值替换为零。

我的语法:

SELECT * FROM (SELECT (B.FIRST_NAME + ' ' + B.MIDDLE_INITIAL + ' ' + B.SURNAME) As 'Name', DATENAME(MONTH, A.COVERAGE_DATE) As 'Month', SUM(ISNULL((A.AMOUNT),0)) As 'Amount' 
FROM Transactions A, PledgerProfile B 
WHERE A.PLEDGER_ID = B.PLEDGER_ID AND DATENAME(Year, A.COVERAGE_DATE) = '2021' 
GROUP BY (B.FIRST_NAME + ' ' + B.MIDDLE_INITIAL + ' ' + B.SURNAME), DATENAME(MONTH, A.COVERAGE_DATE)) AS MonthlySalesData 
PIVOT(SUM(AMOUNT) 
FOR Month IN ([January],[February],[March],[April],[May], [June],[July],[August],[September],[October],[November], [December])) AS MNamePivot

给朋友打电话。有人可以调查一下并检查我的语法吗?我很感激任何反馈。谢谢!

我的输出:

【问题讨论】:

附带说明,您应该真正避免使用旧式连接并使用显式连接 我建议您对每一列使用 case-when-else 子句。像这样:[January] 为 NULL 然后 0.0 的情况,否则 [January] 结束 【参考方案1】:

您可以通过IsNull() 指定列/值,而不是顶部SELECT *

示例

SELECT Name
      ,[January]   = isnull([January],0)
      ,[February]  = isnull([February],0)
      ,[March]     = isnull([March],0)
      ,[April]     = isnull([April],0)
      ,[May]       = isnull([May],0)
      ,[June]      = isnull([June],0)
      ,[July]      = isnull([July],0)
      ,[August]    = isnull([August],0)
      ,[September] = isnull([September],0)
      ,[October]   = isnull([October],0)
      ,[November]  = isnull([November],0)
      ,[December]  = isnull([December],0)
      ....

【讨论】:

【参考方案2】:

只使用条件聚合:

select (pp.FIRST_NAME + ' ' + pp.MIDDLE_INITIAL + ' ' + pp.SURNAME) As 'Name',
       sum(case when month(t.coverage_date) = 1 then 1 else 0 end) as jan,
       sum(case when month(t.coverage_date) = 2 then 1 else 0 end) as feb,
       . . .
from Transactions t join
     PledgerProfile pp 
     on pp.PLEDGER_ID = t.PLEDGER_ID 
where t.coverage_date >= '2021-01-01' and t.coverage_date < '2022-01-01'
group by (pp.FIRST_NAME + ' ' + pp.MIDDLE_INITIAL + ' ' + pp.SURNAME);

不需要子查询。

注意事项:

从不FROM 子句中使用逗号。 始终使用正确、明确、标准、可读的JOIN语法。 使用有意义的表别名,而不是任意字母,例如 ab。 对于日期比较,请使用直接日期比较。这允许在适当的情况下使用索引。

【讨论】:

以上是关于通过 SQL Pivot 将“NULL”值替换为“0”的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE SQL:如何在 Pivot 函数中将 NULL 替换为 0

Sql PIVOT,如何使用 PIVOT 将结果中的 NULL 转换为值 0

SQL - 关于 PIVOT 行为的解释

如何使用pivot Sql Query在0中转换Null值

SQL中PIVOT 行列转换

有关sql 将null值转为空串类型的函数