我正在嘗試使用以下示例將行轉換為列:
| LVL | COL_VALUE | TABLE_SRC |
|---|---|---|
| 16 | INT:ADDRESS_LINE_2:NULL | 情報局 |
| 16 | 基地:ADDRESS_LINE_2:X | 根據 |
| 17 | INT:ADDRESS_LINE_3:NULL | 情報局 |
| 17 | 基地:ADDRESS_LINE_3:X | 根據 |
輸出應該是:
| 情報局 | 根據 |
|---|---|
| INT:ADDRESS_LINE_2:NULL | 基地:ADDRESS_LINE_2:X |
| INT:ADDRESS_LINE_3:NULL | 基地:ADDRESS_LINE_3:X |
具有相同 LVL 的 COL_VALUE 應該在 1 行
我嘗試使用 PIVOT 但由于聚合函式它只回傳 1 行
SELECT *
FROM
(
SELECT
BATCH_ID
,CONTACT_ID
,COL_VALUE
,TABLE_SRC
FROM
MISMATCH
)
PIVOT
(
max(COL_VALUE) FOR TABLE_SRC IN ('1BASE' BASE, '1INT' INT)
)
uj5u.com熱心網友回復:
您可以LVL在內部子查詢中包含:
SELECT *
FROM (
SELECT BATCH_ID
,CONTACT_ID
,COL_VALUE
,TABLE_SRC
,LVL
FROM MISMATCH
) PIVOT (
max(COL_VALUE)
FOR TABLE_SRC IN ('1BASE' BASE, '1INT' INT)
)
如果您不希望它出現在輸出中,則將 from 更改SELECT *為列串列。
其中,對于您的示例資料:
CREATE TABLE mismatch (batch_id, contact_id, LVL, COL_VALUE, TABLE_SRC) AS
SELECT 1, 1, 16, 'INT: ADDRESS_LINE_2:NULL', '1INT' FROM DUAL UNION ALL
SELECT 1, 1, 16, 'BASE: ADDRESS_LINE_2:X', '1BASE' FROM DUAL UNION ALL
SELECT 1, 1, 17, 'INT: ADDRESS_LINE_3:NULL', '1INT' FROM DUAL UNION ALL
SELECT 1, 1, 17, 'BASE: ADDRESS_LINE_3:X', '1BASE' FROM DUAL;
輸出:
BATCH_ID CONTACT_ID LVL 根據 情報局 1 1 16 基地:ADDRESS_LINE_2:X INT:ADDRESS_LINE_2:NULL 1 1 17 基地:ADDRESS_LINE_3:X INT:ADDRESS_LINE_3:NULL
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/330502.html
