簡體   English   中英

SQL pivot 動態列 - 結果

[英]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使用JoinRow_numberconcat如下:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM