我得到了一個有效的答案
將最終查詢添加到問題的末尾。
謝謝
原始問題:
也許這不是一個好主意,甚至不可能,但我想用一個 sql 查詢創建多個串列之類的東西。
這是我的資料示例:
------ --------
| id | type |
------ --------
| 1 | type_1 |
| 2 | type_2 |
| 3 | type_1 |
| 4 | type_1 |
| 5 | type_3 |
| 6 | type_4 |
| 7 | type_2 |
| 8 | type_4 |
| 9 | type_4 |
------ --------
現在我想生成這樣的串列:
-------- -------- -------- --------
| type_1 | type_2 | type_3 | type_4 |
-------- -------- -------- --------
| 1 | 2 | 5 | 6 |
| 3 | 7 | | 8 |
| 4 | | | 9 |
-------- -------- -------- --------
請注意,當沒有找到更多內容但生成更多行時,會有空列。
我不知道這是否可能,但如果是的話,我需要一些幫助來做到這一點:)
如果這是一種更可能/更直接的方式,那么獲得這樣的分組 ID 是完全可以的:
-------- -------
| types | ids |
-------- -------
| type_1 | 1,3,4 |
| type_2 | 2,7 |
| type_3 | 5 |
| type_4 | 6,8,9 |
-------- -------
感謝您的任何建議。
回答
我稍微修改了@Zakaria 發布的查詢:
select type, group_concat(distinct id)
from my_table
where type in (
'type_1',
'type_2',
'type_3'
)
group by type;
我添加了一個distinct id,因為 ID 是頁面,其中一個型別的專案可能存在多次。
這會生成以下輸出
-------- ------------------
| type | group_concat(id) |
-------- ------------------
| type_1 | 1,3,4 |
| type_2 | 2,7 |
| type_3 | 5 |
| typ3_4 | 6,8,9 |
-------- ------------------
完全像我需要的那樣作業。
uj5u.com熱心網友回復:
第二個輸出可以很容易地生成group_concat:
select type, group_concat(id)
from table_name
group by type
小提琴
uj5u.com熱心網友回復:
我們可以借助以下方法使用資料透視查詢生成第一個輸出ROW_NUMBER:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY type ORDER BY id) rn
FROM yourTable
)
SELECT
MAX(CASE WHEN type = 'type_1' THEN id END) AS type_1,
MAX(CASE WHEN type = 'type_2' THEN id END) AS type_2,
MAX(CASE WHEN type = 'type_3' THEN id END) AS type_3,
MAX(CASE WHEN type = 'type_4' THEN id END) AS type_4
FROM cte
GROUP BY rn
ORDER BY rn;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/424994.html
