簡體   English   中英

使用帶有 unnest 的交叉連接

[英]Using cross join with unnest

我正在嘗試創建一些用於測試目的的虛擬數據。 以下是我的查詢 -

select *, LEVEL1, LEVEL2 from table
cross join
(select ('SVC1', 'SVC2') AS LEVEL1 ) b
cross join
(select ('SVC3', 'SVC4') AS LEVEL2 ) b

電流輸出

id       num         name           type   occuSVC2ion    location        LEVEL1         LEVEL2
1000056  1326120205  CHRISTOPHER    H      Physical      ASHEVILLE, NC    (SVC1,SVC2)    (SVC3,SVC4)
1030026  1326105     Jennifer Ew    F      None N/A      Meridian, MS     (SVC1,SVC2)    (SVC3,SVC4)

我希望輸出是 -

id       num         name           type   occuSVC2ion    location        LEVEL1   LEVEL2
1000056  1326120205  CHRISTOPHER    H      Physical      ASHEVILLE, NC    SVC1     SVC3
1000056  1326120205  CHRISTOPHER    H      Physical      ASHEVILLE, NC    SVC1     SVC4
1000056  1326120205  CHRISTOPHER    H      Physical      ASHEVILLE, NC    SVC2     SVC3
1000056  1326120205  CHRISTOPHER    H      Physical      ASHEVILLE, NC    SVC2     SVC4
1030026  1326105     Jennifer Ew    F      None N/A      Meridian, MS     SVC1     SVC3
1030026  1326105     Jennifer Ew    F      None N/A      Meridian, MS     SVC1     SVC4
1030026  1326105     Jennifer Ew    F      None N/A      Meridian, MS     SVC2     SVC3
1030026  1326105     Jennifer Ew    F      None N/A      Meridian, MS     SVC2     SVC4

我糊塗了。 為什么不這樣做呢?

select t.*, v.LEVEL1, v.LEVEL2
from table cross join
     (values ('SCV1', 'SCV3'),
             ('SCV1', 'SCV4'),
             ('SCV2', 'SCV3'),
             ('SCV2', 'SCV4')
     ) v(LEVEL1, LEVEL2);

或者,如果你真的有兩對以上,你可以使用多個CROSS JOIN

select t.*, v1.LEVEL1, v2.LEVEL2
from table cross join
     (values ('SCV1') ('SCV2')
     ) v1(LEVEL1) cross join
     (values ('SCV3'), ('SCV4')
     ) v2(LEVEL2);

您的代碼定義了一個包含兩列的記錄類型(這也稱為復合類型)。 這就是括號在這種情況下的作用,如文檔中所述。

暫無
暫無

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

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