Заменить NULL столбец после SQL UNION выбора - PullRequest
0 голосов
/ 12 февраля 2020

Я использую UNION, чтобы объединить результаты двух операторов выбора. В возвращенном результате значения NULL должны быть заполнены:

SELECT OrderNumber, OrderName 
FROM tblOrder 
WHERE OrderStatus ='New' 

UNION 

SELECT OrderNumber, OrderName 
FROM tblOrderHistory 
WHERE OrderStatus ='New' 
ORDER BY OrderNumber, OrderName

Результат:

OrderNumber OrderName
---------------------
A001            abc
A001            abc
A001            NULL    
A001            NULL
A001            NULL
B002            xyz
B002            NULL
C003            abc

Мой ожидаемый результат:

OrderNumber OrderName
---------------------
A001            abc
A001            abc
A001            abc
A001            abc
B002            xyz
B002            xyz
C003            abc

Как заполните значения NULL, сопоставив номер заказа от tblOrder, значение OrderName в строках tblOrderHistory всегда равно NULL.

1 Ответ

1 голос
/ 12 февраля 2020

Для быстрого решения вы можете использовать MAX() в качестве аналитической функции c здесь:

WITH cte AS (
    SELECT OrderNumber, OrderName FROM tblOrder WHERE OrderStatus = 'New'
    UNION ALL
    SELECT OrderNumber, OrderName FROM tblOrderHistory WHERE OrderStatus = 'New'
)

SELECT
    OrderNumber,
    MAX(OrderName) OVER (PARTITION BY OrderNumber) OrderName
FROM cte
ORDER BY
    OrderNumber,
    OrderName;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...