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

Use coalesce in a subquery while creating a view

我目前正在尝试制作一个视图,以显示已购买汽车(新车或二手车)的客户名称,并且当客户名称为 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'。

C.NameC.FirstName 为 NULL 时,CONCAT 函数将 return ' '。但是,如果将 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.