我的表:
| 名稱 | 價值 |
|---|---|
| item_1 | AB |
| item_2 | 2 |
| item_3 | B1 |
| item_1 | 光碟 |
| item_1 | 英孚 |
| item_2 | 3 |
| item_3 | B2 |
| item_4 | Z Z |
所需輸出:
| item_1 | item_2 | item_3 | item_4 |
|---|---|---|---|
| AB | 2 | B1 | Z Z |
| 光碟 | 3 | B2 | 空值 |
| 英孚 | 空值 | 空值 | 空值 |
SQL查詢:
with item_1 as (select value from my_table where name = 'item_1'),
item_2 as (select value from my_table where name = 'item_2'),
item_3 as (select value from my_table where name = 'item_3'),
item_4 as (select value from my_table where name = 'item_4')
select item_1.value, item_2.value,item_3.value, item_4.value from item_1 cross join item_2 cross join item_3 cross join item_4;
如果我將資料透視與 MAX 聚合函式一起使用,則查詢將僅顯示相應專案的最大值,而不是顯示所有值。
有沒有辦法在沒有交叉連接的情況下將單個列拆分為多個列(使用上面查詢中提到的 where 條件)。
uj5u.com熱心網友回復:
使用ROW_NUMBER然后PIVOT:
SELECT item_1,
item_2,
item_3,
item_4
FROM (
SELECT t.*,
ROW_NUMBER() OVER (PARTITION BY name ORDER BY ROWNUM) AS rn
FROM table_name t
)
PIVOT (
MAX(value) FOR name IN (
'item_1' AS item_1,
'item_2' AS item_2,
'item_3' AS item_3,
'item_4' AS item_4
)
)
其中,對于樣本資料:
CREATE TABLE table_name (Name, Value) AS
SELECT 'item_1', 'AB' FROM DUAL UNION ALL
SELECT 'item_2', '2' FROM DUAL UNION ALL
SELECT 'item_3', 'B1' FROM DUAL UNION ALL
SELECT 'item_1', 'CD' FROM DUAL UNION ALL
SELECT 'item_1', 'EF' FROM DUAL UNION ALL
SELECT 'item_2', '3' FROM DUAL UNION ALL
SELECT 'item_3', 'B2' FROM DUAL UNION ALL
SELECT 'item_4', 'ZZ' FROM DUAL;
輸出:
ITEM_1 專案_2 專案_3 ITEM_4 AB 2 B1 Z Z 光碟 3 B2 空值 英孚 空值 空值 空值
db<>在這里擺弄
uj5u.com熱心網友回復:
這個怎么樣?
DF列由row_number分析函式計算,該函式按每個名稱磁區(并按值排序)。它從最后的列串列中被忽略,但它在子句中的作用是至關重要的。GROUP BY
SQL> with test (name, value) as
2 (select 'item_1', 'AB' from dual union all
3 select 'item_2', '2' from dual union all
4 select 'item_3', 'B1' from dual union all
5 select 'item_1', 'CD' from dual union all
6 select 'item_1', 'EF' from dual union all
7 select 'item_2', '3' from dual union all
8 select 'item_3', 'B2' from dual union all
9 select 'item_4', 'ZZ' from dual
10 ),
11 temp as
12 (select name, value,
13 row_number() over (partition by name order by value) df
14 from test
15 )
16 select
17 max(case when name = 'item_1' then value end) item_1,
18 max(case when name = 'item_2' then value end) item_2,
19 max(case when name = 'item_3' then value end) item_3,
20 max(case when name = 'item_4' then value end) item_4
21 from temp
22 group by df;
ITEM_1 ITEM_2 ITEM_3 ITEM_4
------ ------ ------ ------
AB 2 B1 ZZ
CD 3 B2
EF
SQL>
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/414320.html
標籤:
上一篇:從另一個表中選擇不包含單詞的行
