Используйте coalesce в подзапросе при создании представления

Emil Grozdanov спросил: 28 марта 2018 в 04:11 в: subquery

В настоящее время я пытаюсь сделать вид, чтобы показать имя клиентов, которые приобрели автомобиль (новый или использованный), и ему нужно показать "NA", когда имя клиента NULL.

IF OBJECT_ID ('V_PrixSuperieurMoyenne','V') IS NOT NULL
    DROP VIEW V_PrixSuperieurMoyenne;
GOCREATE 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)
)
GOSELECT *
FROM V_PrixSuperieurMoyenne
ORDER BY 1,2
GO

Вот мой код, однако кажется, что COALESCE не работает, когда я пытаюсь запустить код, когда имена NULL, он показывает только пустую строку. Мне нужно, чтобы он показывал "NA".

1 ответ

Есть решение
Jake Reece ответил: 28 марта 2018 в 05:19

Функция CONCAT вернет '', когда C.Name и C.FirstName равны NULL. Однако, если вы замените 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.

Emil Grozdanov ответил: 28 марта 2018 в 05:07
Спасибо, добавление строк было тем, о чем я не думал.