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