我正在使用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
如何通过匹配tblOrder
中的订单号来填充NULL
值,tblOrderHistory
行中的OrderName
值始终NULL
。
对于快速解决方案,您可以考虑在此处使用MAX()
作为分析函数:
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;