簡體   English   中英

如何查詢一張表,並將結果作為兩張表返回

[英]How can i query one table, and return the result as two tables

我想查詢一個包含具有兩種類型數據的列的表,並且我想將此查詢的結果作為兩個單獨的表來獲取,以便我可以分別處理數據。

該列包含:街道名稱和城鎮名稱,因此我想要兩個表:一個用於街道名稱,第二個用於城鎮名稱。

包含我想要分隔的兩類數據的列的示例:單擊以查看 img我希望將 street_name 作為一列,而對於 town_name 也是如此

//表 1

select * 
from table
where postaladdress = 'street_name'

//表 2

select * 
from table
where postaladdress = 'town_name'

這是一種方式(假設您的表稱為test ):

  SELECT CASE WHEN UPPER(POSTALADRESS) = UPPER('STREET_NAME') THEN POSTALADRESSVALUE END A, 
           CASE WHEN UPPER(POSTALADRESS) = UPPER('TOWN_NAME') THEN POSTALADRESSVALUE END B
  FROM TEST;       

這是另一種方式:

SELECT A.STREET_NAME, B.TOWN_NAME from 
(select coalesce(POSTALADRESSVALUE, '' ) STREET_NAME, POSTALADRESS
FROM test T
where UPPER(POSTALADRESS) = UPPER('STREET_NAME')) A
full outer join
(SELECT coalesce(POSTALADRESSVALUE, '' ) TOWN_NAME, POSTALADRESS
FROM test
where UPPER(POSTALADRESS) = UPPER('TOWN_NAME')) B
on a.POSTALADRESS = b.POSTALADRESS;

但是如果這兩種方式的數據之間有任何聯系,它就不會“顯示”出來。 您將得到的只是一列中的街道名稱和另一列中的城市名稱。

這是一個小演示

PS 如果您使用第一種方法,那么您將在兩列中都有一些空值,如果您使用第二種方法,則不會。

如果您使用的是 11gR2 或更高版本,並假設您有一些鍵列將街道和城鎮名稱對連接在一起,則可以使用數據透視操作:

select *
from your_table
pivot (
  max(postaladressvalue) 
  for (postaladress) in ('street_name' as street, 'town_name' as town)
)

帶有示例數據的演示,包括在 CTE 中將行鏈接在一起的some_key

with your_table (some_key, postaladress, postaladressvalue) as (
  select 1, 'street_name', 'adresse postale' from dual
  union all
  select 2, 'street_name', 'AdresseNONSWIFT' from dual
  union all
  select 3, 'street_name', 'ADRESSE POSTALE' from dual
  union all
  select 4, 'street_name', 'WAdressPost' from dual
  union all
  select 4, 'town_name', 'WAdressPost2' from dual
  union all
  select 5, 'street_name', 'CU133POSADD1' from dual
  union all
  select 5, 'town_name', 'CU133POSADD2' from dual
  union all
  select 6, 'street_name', 'as postale' from dual
  union all
  select 7, 'street_name', 'YOUNESPOS1' from dual
  union all
  select 7, 'town_name', 'YOUNESPOS2' from dual
  union all
  select 8, 'street_name', 'adresse postale' from dual
)
select *
from your_table
pivot (
  max(postaladressvalue)
  for (postaladress) in ('street_name' as street, 'town_name' as town)
)
order by some_key;

得到:

  SOME_KEY STREET          TOWN           
---------- --------------- ---------------
         1 adresse postale                
         2 AdresseNONSWIFT                
         3 ADRESSE POSTALE                
         4 WAdressPost     WAdressPost2   
         5 CU133POSADD1    CU133POSADD2   
         6 as postale                     
         7 YOUNESPOS1      YOUNESPOS2     
         8 adresse postale                

數據庫<>小提琴

如果還有其他列,您可能需要在your_table進行子查詢,以便在數據透視之前僅選擇您感興趣的列。

在內部,樞軸本質上與@VBoka 顯示的邏輯相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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