當前資料集:
| 用戶身份 | FEATURE_ID | FEATURE_ID_VALUE |
|---|---|---|
| 123 | 1 | 真的 |
| 321 | 1 | 錯誤的 |
| 123 | 2 | 一些文本 |
| 321 | 2 | 另一個 |
| 123 | 3 | 更多文字 |
| 321 | 3 | 甚至更多 |
我希望能夠在 SQL 查詢中轉換此資料集以生成如下內容:
| 用戶身份 | FEATURE_ID_1 | FEATURE_ID_2 | FEATURE_ID_3 |
|---|---|---|---|
| 123 | 真的 | 一些文本 | 更多文字 |
| 321 | 錯誤的 | 另一個 | 甚至更多 |
我已經研究過使用 Pivots 和 Group By 功能,但我自己無法想出有效的方法。
uj5u.com熱心網友回復:
您可以使用PIVOT:
SELECT *
FROM table_name
PIVOT (
MAX(feature_id_value)
FOR FEATURE_ID IN (
1 AS feature_id_1,
2 AS feature_id_2,
3 AS feature_id_3
)
)
其中,對于樣本資料:
CREATE TABLE table_name (USER_ID, FEATURE_ID, FEATURE_ID_VALUE) AS
SELECT 123, 1, 'TRUE' FROM DUAL UNION ALL
SELECT 321, 1, 'FALSE' FROM DUAL UNION ALL
SELECT 123, 2, 'SomeText' FROM DUAL UNION ALL
SELECT 321, 2, 'AnotherOne' FROM DUAL UNION ALL
SELECT 123, 3, 'MoreText' FROM DUAL UNION ALL
SELECT 321, 3, 'EvenMore' FROM DUAL;
輸出:
用戶身份 FEATURE_ID_1 FEATURE_ID_2 FEATURE_ID_3 123 真的 一些文本 更多文字 321 錯誤的 另一個 甚至更多
db<>在這里擺弄
uj5u.com熱心網友回復:
你可以使用 case 陳述句
這是小提琴 https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=025750c52c92080b72b34688a60ba609
select user_id,
max(case feature_id when 1 then feature_id_value else null end) as Feature_ID_1,
max(case feature_id when 2 then feature_id_value else null end) as Feature_ID_2,
max(case feature_id when 3 then feature_id_value else null end) as Feature_ID_3
from mytable group by user_id
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/478835.html
上一篇:SQL查詢從日期獲取季度和月/年
