[英]Oracle: Union columns if non-null value exists
我一直在嘗試,但找不到正確的方法來做到這一點。
我的查詢如下所示:
select name, value from table1
union select name, value from table2
當前,我的查詢返回以下內容:
Name | Value
-------------
Name1 | null
Name1 | value1
Name1 | value2
Name2 | null
上面結果中的空值僅來自table1,並且僅當相應名稱沒有非空值時,我才想返回空值,例如:
Name | Value
-------------
Name1 | value1
Name1 | value2
Name2 | null
關於如何執行此查詢的任何建議?
比起到目前為止的答案(IMO),一種更簡單的方法是從存在非空值的名稱的結果中明確排除空值。 可以寫成
with unioncte as (
select name, value from table1
union
select name, value from table2
)
select name, value from unioncte
minus
select name, null from unioncte
where value is not null;
您還可以使用解析函數來計算名稱的NULL值數量,並以此過濾:
with v_data as (
select name, value from table1
union
select name, value from table2
)
select v2.* from (
select
v1.*,
count(value) over (partition by name) as value_cnt
from v_data v1
) v2 where value_cnt = 0 or value is not null
您可以使用where
:
SELECT *
FROM (
SELECT name, value
FROM table1
UNION
SELECt name, value
FROM table2
) s1
WHERE s1.value IS NOT NULL
OR s1.name NOT IN (
SELECT name
FROM table1
WHERE value IS NOT NULL
UNION
SELECT name
FROM table2
WHERE value IS NOT NULL
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.