[英]SQL pivot with dynamic columns - result
我有 2 個表:
表 1) JOB_129_FEED_ITEMS
ID | 短標題 |
---|---|
1個 | McGregor 鹿皮鞋 |
2個 | Bose 音箱 |
表 2) JOB_129_FEED_ITEMS_CLASSICTAX
ID | items_id | 經典稅 |
---|---|---|
1個 | 1個 | 時尚 |
2個 | 1個 | 休閑鞋 |
3個 | 1個 | 鞋類 其他 |
4個 | 1個 | 其他男士鞋類 |
5個 | 2個 | 棕色商品 |
6個 | 2個 | 高保真 |
7 | 2個 | 高保真揚聲器 |
8個 | 2個 | 高保真揚聲器 |
他們可以加入 JOB_129_FEED_ITEMS.ID = JOB_129_FEED_ITEMS_CLASSICTAX.ITEMS_ID
我正在尋找這樣的結果
ID | 簡稱 | 經典稅1 | 經典稅2 | 經典稅3 | 經典稅4 |
---|---|---|---|---|---|
1個 | McGregor Homie 莫卡辛鞋 | 時尚休閑 | 鞋類 | 鞋類 其他 | 其他男士鞋類 |
2個 | Auna Simpfy 音箱 | 棕色商品 | 高保真 | 高保真揚聲器 | 高保真揚聲器 |
這該怎么做? SQL Pivot? 謝謝
我們可以嘗試在ROW_NUMBER()
的幫助下使用 pivot 查詢:
WITH cte AS (
SELECT i.id, i.SHORT_TITLE, c.CLASSICTAX,
ROW_NUMBER() OVER (PARTITION BY i.id ORDER BY c.CLASSICTAX) rn
FROM JOB_129_FEED_ITEMS i
INNER JOIN JOB_129_FEED_ITEMS_CLASSICTAX c
ON c.items_id = i.id
)
SELECT
id,
SHORT_TITLE,
MAX(CASE WHEN rn = 1 THEN CLASSICTAX END) AS CLASSICTAX1,
MAX(CASE WHEN rn = 2 THEN CLASSICTAX END) AS CLASSICTAX2,
MAX(CASE WHEN rn = 3 THEN CLASSICTAX END) AS CLASSICTAX3,
MAX(CASE WHEN rn = 4 THEN CLASSICTAX END) AS CLASSICTAX4
FROM cte
GROUP BY
id,
SHORT_TITLE
ORDER BY
id;
數據
CREATE TABLE Job129FeedItem(
id INTEGER NOT NULL
,SHORT_TITLE VARCHAR(100) NOT NULL
);
INSERT INTO Job129FeedItem
(id,SHORT_TITLE) VALUES
(1,'McGregor Moccasins'),
(2,'Bose speaker');
CREATE TABLE Job129FeedItemsCLASSICTAX(
id INTEGER NOT NULL
,items_id INTEGER NOT NULL
,CLASSICTAX VARCHAR(100) NOT NULL
);
INSERT INTO Job129FeedItemsCLASSICTAX
(id,items_id,CLASSICTAX) VALUES
(1,1,'FASHION'),
(2,1,'CASUAL FOOTWEAR'),
(3,1,'FOOTWEAR OTHER'),
(4,1,'FOOTWEAR OTHER MEN'),
(5,2,'BROWN GOODS'),
(6,2,'HIFI'),
(7,2,'HIFI LOUDSPEAKERS'),
(8,2,'HIFI LOUDSPEAKER');
在Subqurey of pivot
Pivot
使用Join
, Row_number
和concat
如下:
select *
from (select j1.id,
SHORT_TITLE,
concat('CLASSICTAX', row_number()
over(
partition by items_id
order by CLASSICTAX asc))) PivotC,
CLASSICTAX
from Job129FeedItem j1
join Job129FeedItemsCLASSICTAX j2
on j1.id = j2.items_id) src
pivot ( Max(CLASSICTAX)
for PivotC in ([CLASSICTAX1],
[CLASSICTAX2],
[CLASSICTAX3],
[CLASSICTAX4]) ) piv
order by id asc
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.