在创建视图时在子查询中使用coalesce

时间:2018-04-21 17:51:33

标签: subquery concat coalesce isnull

我目前正在尝试制作视图,以便显示购买汽车(新的或已使用过的)的客户的名称,并在客户端名称为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'。

1 个答案:

答案 0 :(得分:0)

CONCATC.Name为NULL时,C.FirstName函数将返回''。但是,如果使用字符串添加替换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