【问题标题】:Use coalesce in a subquery while creating a view在创建视图时在子查询中使用合并
【发布时间】:2018-04-21 17:51:32
【问题描述】:

我目前正在尝试制作一个视图,以显示购买汽车(新车或二手车)的客户的名称,并且当客户名称为 NULL 时需要显示“NA”。

IF OBJECT_ID ('V_PrixSuperieurMoyenne','V') IS NOT NULL
    DROP VIEW V_PrixSuperieurMoyenne;
GO

CREATE VIEW V_PrixSuperieurMoyenne
AS
(
    SELECT
        CS.[State],
        CI.ListPrice,
        CI.CarInventoryID,
        COALESCE(CONCAT(C.Name, ' ', C.FirstName), 'NA') AS 'Nom du Client',
        (
            SELECT AVG(CI.ListPrice)
            FROM CarInventory CI
            INNER JOIN CarState CS ON CS.CarStateID = CI.CarStateID
            WHERE CS.State = 'New'
        ) AS 'Prix Moyen Neuf'
    FROM
        CarInventory CI
        INNER JOIN CarState CS ON CS.CarStateID = CI.CarStateID
        LEFT JOIN Invoice I ON I.CarInventoryID = CI.CarInventoryID
        LEFT JOIN Client C ON C.ClientID = I.ClientID
    GROUP BY
        CS.State,
        CI.ListPrice,
        CI.CarInventoryID,
        CONCAT(C.Name , ' ', C.FirstName)
)
GO

SELECT *
FROM V_PrixSuperieurMoyenne
ORDER BY 1,2
GO

这是我的代码,但是当我尝试运行代码时,COALESCE 似乎不起作用,当名称为 NULL 时,它只显示一个空字符串。我需要它显示“NA”。

【问题讨论】:

    标签: subquery concat coalesce isnull


    【解决方案1】:

    CONCATC.NameC.FirstName 为 NULL 时,CONCAT 函数将返回 ' '。但是,如果您将CONCAT 替换为字符串添加,您将得到NULL,因为一行字符串添加中的单个NULL 值会使整个字符串变为空。

    -- Returns 'NA' when C.Name or C.FirstName are NULL.    
    COALESCE(C.Name + ' ' + C.FirstName,'NA')
    

    您也可以将 COALESCE 替换为 ISNULL,因为您只检查单个项目的无效性:

    ISNULL(C.Name +' ' + C.FirstName,'NA')
    

    请务必在您的 GROUP BY 中也进行此更改。

    COALESCE 通常用于检查多个项目是否为NULL

    【讨论】:

    • 谢谢,字符串添加是我没想到的。
    猜你喜欢
    • 2014-10-23
    • 2012-09-29
    • 2020-03-04
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-05
    相关资源
    最近更新 更多