SQL查询在应该有数值的连接后返回空值
Posted
技术标签:
【中文标题】SQL查询在应该有数值的连接后返回空值【英文标题】:SQL query is returning null values after join where there should be numeric values 【发布时间】:2021-12-27 02:08:30 【问题描述】:我正在将现有表中的一些数据插入到新表中。有一个名为 DescNitro
的特定列在新表中返回为 0 或 Null。我已经检查了特定情况,并且 Null 值正在替换旧表上的数值。知道为什么会这样吗?代码如下:
DECLARE @DataAtual date = '2021-11-01';
DECLARE @UltMes date = DATEADD(MONTH, -1, @DataAtual);
DECLARE @PenUltMes date = DATEADD(MONTH, -2, @DataAtual);
DECLARE @AnoUltMes integer = YEAR(@UltMes);
DECLARE @MesUltMes integer = MONTH(@UltMes);
DECLARE @AnoPenUltMes integer = YEAR(@PenUltMes);
DECLARE @MesPenUltMes integer = MONTH(@PenUltMes);
SELECT
m.datAno
,m.datMes
,m.Segmento
,m.nomDiretoria
,m.nomFilial
,m.Ov
,o.[Região] AS Filial_Pri
,m.[Cod_Rede] AS Cod_Rede
,m.Desc_Rede
,m.CodSegTatica AS cod_Canal_SAP
,m.Canal_Pricing AS cod_Canal_Pri
,m.Des_Canal_Pricing
,m.codMaterial
,m.Vol_Meta AS Vol_Meta_Ciex
,m.Fat_Meta AS Fat_Meta_Ciex
,g.[DescNitro]
INTO
[pri].[tblMetaPrecoteste]
FROM
[pri].[tblDadMetaCiex] m
LEFT JOIN
dbo.tblCadMaterial mat ON mat.codMaterial = m.codMaterial
LEFT JOIN
[pri].[tblDadOvFilial] o ON o.[Organização] = m.Ov
LEFT JOIN
[pri].[tblDadArvore] a ON a.Material = m.codMaterial
AND a.[Filial] = o.[Região]
AND a.[Canal de Vendas] = m.[Des_Canal_Pricing]
LEFT JOIN
(SELECT
t.[codMaterial],
t.[codOrganizacaoVenda],
t.[codSegTatica],
t.[codRede],
SUM(t.[DescNitro]) AS DescNitro
FROM
[MktIntelligence].[dbo].[tbl_F_PM_join_real_fifo_meta_com_gp] t
WHERE
(t.datmes = @MesUltMes AND t.datAno = @AnoUltMes)
OR (t.datmes = @MesPenUltMes AND t.datAno = @AnoPenUltMes)
GROUP BY
t.[codMaterial], t.[codOrganizacaoVenda], t.[codSegTatica], t.[codRede]) g ON m.[codMaterial] = g.[codMaterial]
AND m.[Ov] = g.[codOrganizacaoVenda]
AND m.[codSegTatica] = g.[codSegTatica]
AND m.[Cod_Rede] = g.[codRede]
【问题讨论】:
因为这是一个left join
,因此如果没有匹配,它将显示为NULL
,否则显示为isnull(columnname,0)
,因此当它为NULL时将显示0
过去 2 个月的 tbl_F_PM_join_real_fifo_meta_com_gp 中可能缺少数据?没有匹配,没有 g.DescNitro。
是的,刚刚在其中一个表的 CodRede 列中发现了一个问题。它具有“1”值,而其他表中的相应列是“01”。因此,在这些情况下没有匹配项,这正是 DescNitro 最初具有不同于零的值的地方。非常感谢大家,我自己不会想出来的!
【参考方案1】:
因为这是一个left join
,因此如果没有匹配,它将显示为NULL,否则使用isnull(columnname,0)
,因此当它为NULL时将显示0
【讨论】:
以上是关于SQL查询在应该有数值的连接后返回空值的主要内容,如果未能解决你的问题,请参考以下文章