【问题标题】:SQL Server - not displaying NULL valuesSQL Server - 不显示 NULL 值
【发布时间】:2019-01-21 11:29:14
【问题描述】:
cas=(
SELECT CONVERT(DECIMAL(15, 2), sum(somme))
AND CAST(DATEP AS DATE) BETWEEN DATE(YEAR, -1, CAST(@DATED AS DATE)) 
                            AND DATEAD(YEAR, -1, CAST(@DAT AS DATE))
GROUP BY etab,
         libelle 

我想要一个查询不返回空值的解决方案。

![在此处输入图片描述][1]

【问题讨论】:

  • 这是由您使用的 SQL 客户端显示的,而不是由“SQL Server”显示的 - 您使用哪个工具来运行您的 SQL 语句?
  • 添加到where 子句:and x is not null and y is not null and z is not null...(x,y 和 z 应该是列名
  • 我强烈建议您学习如何格式化您的代码。使用空格和很好地使用换行符可以使您的代码无限地更具可读性,或者您自己和他人都可以阅读。老实说,将所有内容都对齐并且缺少换行符只会造成难以阅读的混乱。
  • 这是您查询的格式化版本:db<>fiddle。您正在混合格式也很奇怪。您从{expression} AS '{Literal String Alias}' 开始,然后切换到{Alias} = {Expression}。此查询似乎由超过 1 人撰写。
  • 请不要破坏您的帖子。

标签: sql-server tsql


【解决方案1】:

将 CA_AN 子查询移动到 Cross Apply 并检查 where 子句中的 is not null

SELECT 
    REGION = et_region, 
    [STORE CODE] = e.et_etablissement,
    [STORE NAME] = et_libelle,
    CA = CONVERT(DECIMAL(15,2),SUM(gl_totalttcdev)),
    NBRTICKETS = CONVERT(DECIMAL(15,0),COUNT(distinct(GL_NUMERO))),
    NBRARTICLES =  CONVERT(DECIMAL(15,0),SUM(GL_QTEFACT)),
    UPT =  CONVERT(DECIMAL(15,2),SUM(GL_QTEFACT)/COUNT(DISTINCT(GL_NUMERO))) ,
    PM =  CONVERT(DECIMAL(15,2),SUM(gl_totalttcdev)/COUNT(DISTINCT(GL_NUMERO))),
    CA_AN = MAX(CA_AN.caan)

FROM piece 
LEFT JOIN ligne ON 
    gl_souche = gp_souche 
    AND gl_naturepieceg = gp_naturepieceg 
    AND gl_numero = gp_numero 
    AND gl_indiceg = gp_indiceg 
LEFT JOIN etabliss AS e ON
    gp_etablissement = e.et_etablissement 
LEFT JOIN ARTICLE ON 
    GL_CODEARTICLE = ARTICLE.GA_CODEARTICLE
CROSS APPLY (
    SELECT 
        caan = CONVERT(DECIMAL(15,2),sum(gl_totalttcdev)) 
    FROM piece 
    LEFT JOIN ligne ON 
        gl_souche = gp_souche 
        AND gl_naturepieceg = gp_naturepieceg 
        AND gl_numero = gp_numero 
        AND gl_indiceg = gp_indiceg 
    LEFT JOIN etabliss AS e1 ON 
        e1.et_etablissement = gp_etablissement
    left join ARTICLE on 
        GL_CODEARTICLE = ARTICLE.GA_CODEARTICLE
    where 
        gp_naturepieceg = 'FFO'
        AND gl_typearticle <> ''
        AND gl_typearticle <> 'FI' 
        AND e1.et_etablissement = e.et_etablissement
        AND CAST(GP_DATEPIECE AS DATE) BETWEEN  DATEADD(YEAR,-1,CAST(@DATED AS DATE)) AND DATEADD(YEAR,-1,CAST(@DATEF AS DATE))
    GROUP BY 
        et_etablissement, 
        et_libelle

) CA_AN
WHERE 
    gp_naturepieceg = 'FFO' 
    AND (e.et_etablissement NOT IN ('F20','F44','R05','F40','F47'))
    AND gl_typearticle <> ''
    AND gl_typearticle <> 'FI' 
    AND et_LIBELLE LIKE @MAG
    AND CAST(GP_DATEPIECE AS DATE) BETWEEN  CAST(@DATED AS DATE) AND CAST(@DATEF AS DATE) 
    AND CA_AN.caan IS NOT NULL
GROUP BY 
    et_region,
    et_etablissement, 
    et_libelle
HAVING SUM(gl_totalttcdev) > 0 
ORDER BY 
    et_region,
    CA_AN DESC,
    et_etablissement

【讨论】:

    猜你喜欢
    • 2014-05-13
    • 2014-08-06
    • 2018-07-02
    • 2019-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    相关资源
    最近更新 更多