【问题标题】:SQL - turn records to columnsSQL - 将记录转换为列
【发布时间】:2021-11-10 11:30:12
【问题描述】:

我有一张这样的桌子: 区间班 01-02班1 02-03 2班 03-04班1 04-05 2班 05-06第一课

我想要这样的结果

class1 class2
01-02  02-03
03-04  04-05
05-06  NULL

第一行是列名

非常感谢!

【问题讨论】:

  • 嗨,任何特定的数据库引擎?
  • 微软 SQL Server 2008 R2

标签: sql pivot rows


【解决方案1】:

您可以按类枚举行,然后使用条件聚合:

select max(case when class = 'class1' then interval end) as class1,
       max(case when class = 'class2' then interval end) as class2
from (select t.*,
             row_number() over (partition by class order by interval) as seqnum
      from t
     ) t
group by seqnum;

【讨论】:

  • 它工作正常。谢谢。我想知道是否存在使用枢轴的解决方案....
  • @CornelMilitaru 。 . .大概。但是为什么要打扰呢?比较麻烦,不是标准SQL。
【解决方案2】:

如果它是固定数量的列,您可以使用带有 GROUP BY 的 SELECT 来执行此操作。 让我给你看一个关于“T_Capital_Rainfall_Q”表的例子(见下文):

  SELECT  Capital, Cal_Year
        , Max(Iif(Quart="Q1", Quart_Rainfall, Null)) AS Q1
        , Max(Iif(Quart="Q2", Quart_Rainfall, Null)) AS Q2
        , Max(Iif(Quart="Q3", Quart_Rainfall, Null)) AS Q3
        , Max(Iif(Quart="Q4", Quart_Rainfall, Null)) AS Q4
  FROM T_Capital_Rainfall_Q
  GROUP BY Capital, Cal_Year ;

上述 SQL 操作产生以下输出记录列表(未对齐,抱歉):

Capital Cal_Year    Q1  Q2  Q3  Q4
Beijing 2018    0   4   7,8 17
Washington  2018    12.13   5.67    2.26    12.7

如果是可变数量的列,唯一的方法是使用 TRANSFORM Query。

上面例子的表格是:

T_Capital_Rainfall_Q
Capital Cal_Year    Quart   Quart_Rainfall
Beijing 2018    Q1  0
Beijing 2018    Q2  4
Beijing 2018    Q3  7.8
Beijing 2018    Q4  17
Washington  2018    Q1  12.13
Washington  2018    Q2  5.67
Washington  2018    Q3  2.26
Washington  2018    Q4  12.7

LightningGuide.net 中的更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    • 2011-05-10
    • 1970-01-01
    • 2015-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多