簡體   English   中英

Oracle:如果存在非空值,則合並列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM