【问题标题】:shift rows to columns [duplicate]将行移到列[重复]
【发布时间】:2018-12-14 10:45:30
【问题描述】:

表:

ID  Subject
1   Math
1   Eng
2   Sci
2   Phy
2   bio

输出:

id  Subject1    Subject2    Subject3
1   Math        Eng 
2   Sci         Phy         bio

所需的输出如上所示。

【问题讨论】:

    标签: sql oracle oracle11g pivot


    【解决方案1】:

    我会使用 ROW_NUMBER 窗口函数和条件聚合函数

    SELECT ID,
          MAX(CASE WHEN rn = 1 THEN SUBJECT END) Subject1,
          MAX(CASE WHEN rn = 2 THEN SUBJECT END) Subject2,
          MAX(CASE WHEN rn = 3 THEN SUBJECT END) Subject3    
    FROM(
        SELECT t1.*,ROW_NUMBER() OVER(PARTITION BY ID ORDER BY ROWNUM) rn
        FROM T t1
    ) t1 
    GROUP BY ID
    

    https://rextester.com/TMGK34943

    【讨论】:

      【解决方案2】:

      https://blogs.oracle.com/sql/how-to-convert-rows-to-columns-and-back-again-with-sql-aka-pivot-and-unpivot#transpose

      NOC ATH GYM CYC BOX SAI
      胸罩 1 3 0 1 2
      中国 6 2 2 4 1
      书房 1 0 2 0 3
      ESP 2 0 0 0 0
      ETH 8 0 0 0 0
      GRE 1 1 0 0 2

      从 olympic_country_sport_medals 中选择 * 不转( (奖牌)在(ath,box,gym,sai,cyc)的运动 ) 枢轴 ( 总和(奖牌)在( 'BRA' 胸罩,'CHN' CHN,'DEN' DEN,'ESP' ESP,'ETH' ETH,'GRE' GRE ) );

      输出:

      SPORT BRA CHN DEN ESP ETH GRE
      田径 1 6 1 2 8 1
      艺术馆 3 2 0 0 0 1
      拳击 1 4 0 0 0 0
      航行 2 1 3 0 0 2
      赛道自行车 0 2 2 0 0 0

      【讨论】:

        猜你喜欢
        • 2017-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-01
        • 2021-01-27
        • 2020-04-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多