【问题标题】:SQL pivot with dynamic columns - result具有动态列的 SQL 数据透视表 - 结果
【发布时间】:2023-01-08 16:40:29
【问题描述】:

我有 2 个表:

表 1) JOB_129_FEED_ITEMS

id SHORT_TITLE
1 McGregor Moccasins
2 Bose speaker

表 2) JOB_129_FEED_ITEMS_CLASSICTAX

id items_id CLASSICTAX
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

他们可以加入 JOB_129_FEED_ITEMS.ID = JOB_129_FEED_ITEMS_CLASSICTAX.ITEMS_ID

我正在寻找这样的结果

id short_title CLASSICTAX1 CLASSICTAX2 CLASSICTAX3 CLASSICTAX4
1 McGregor Homie Moccasins FASHION CASUAL FOOTWEAR FOOTWEAR OTHER FOOTWEAR OTHER MEN
2 Auna Simpfy Speaker BROWN GOODS HIFI HIFI LOUDSPEAKERS HIFI LOUDSPEAKER

这该怎么做? SQL 数据透视表?谢谢

【问题讨论】:

  • 请标记您的 DBMS。为什么要在 SQL 中执行此操作?这对您的应用程序来说是一项更好的任务。只需通过一个简单的查询获取数据,然后让您的程序以预期的形式显示它。

标签: sql


【解决方案1】:

我们可以在 ROW_NUMBER() 的帮助下尝试使用数据透视查询:

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;

【讨论】:

    猜你喜欢
    • 2011-12-14
    • 2011-12-10
    • 2014-02-15
    • 2023-03-13
    • 1970-01-01
    • 2018-12-31
    • 2016-03-27
    • 2012-06-10
    • 1970-01-01
    相关资源
    最近更新 更多