我們有一個存盤名稱/值對的表,一個記錄存盤主機名,另一個記錄存盤埠號。
我不想回傳兩行,而是回傳一行兩列。我可以按如下方式完成它,但我有幾列要回傳,我懷疑 PIVOT 最終可能會產生更簡單的 SQL。
SELECT
(
SELECT
CCD.DISPL_CTGRY_CD AS EMAIL_HOST
FROM FDS_MAINT.CONFGRTN_CTGRY_DTL CCD
WHERE CCD.CONFGRTN_CTGRY_ID = 56
AND CCD.CONFGRTN_CTGRY_CD = 'HOST'
) HOST,
(
SELECT
CCD.DISPL_CTGRY_CD AS EMAIL_HOST
FROM FDS_MAINT.CONFGRTN_CTGRY_DTL CCD
WHERE CCD.CONFGRTN_CTGRY_ID = 56
AND CCD.CONFGRTN_CTGRY_CD = 'PORT'
) PORT
FROM DUAL
你能幫我完成這個 SQL 以使用 PIVOT 函式獲得以下結果嗎?
| 主持人 | 港口 |
|---|---|
| testapp.silver.com | 25 |
我正在使用 Oracle 19。
謝謝!
uj5u.com熱心網友回復:
這是兩種方法,因為我們沒有選擇具有不同值的其他列 -
首先(帶樞軸) -
select CONFGRTN_CTGRY_ID,max("'HOST'") as host,
max("'PORT'") as port
from CONFGRTN_CTGRY_DTL
pivot (max (DISPL_CTGRY_CD) for CONFGRTN_CTGRY_CD in ('HOST','PORT') )
group by CONFGRTN_CTGRY_ID
第二 -
select CONFGRTN_CTGRY_ID, max(HOST) as host, max(PORT) as port
from
(select CONFGRTN_CTGRY_ID,case when CCD.CONFGRTN_CTGRY_CD = 'HOST'
then CCD.DISPL_CTGRY_CD end AS HOST,
case when CCD.CONFGRTN_CTGRY_CD = 'PORT'
then CCD.DISPL_CTGRY_CD end AS PORT
from CONFGRTN_CTGRY_DTL CCD
WHERE CCD.CONFGRTN_CTGRY_ID in (56,57) )
group by CONFGRTN_CTGRY_ID
DB小提琴在這里。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/489464.html
標籤:甲骨文
