【问题标题】:TSQL Pivot Transformation row fields -> columnTSQL Pivot Transformation 行字段 -> 列
【发布时间】:2023-04-07 03:03:01
【问题描述】:

假设我有以下数据:

ID         Key        String        Number

1          Name       A             -1
1          Age        ''            30  
1          Sex        Male          -1
2          Name       B             -1 
2          Age        ''            20
2          Sex        Female        -1  

我想知道我们是否可以使用 Pivot 生成以下数据

ID          Name        Age           Sex
1           A           30            Male
2           B           20            Female

任何帮助将不胜感激!

【问题讨论】:

    标签: sql-server tsql row pivot


    【解决方案1】:

    这样做会更容易吗?

    SELECT id
    ,MAX(CASE WHEN Key = 'Name' THEN string END) as name
    ,MAX(CASE WHEN Key = 'Age' THEN number END) as age
    ,MAX(CASE WHEN Key = 'sex' THEN string END) as sex
    FROM table
    GROUP BY id
    

    【讨论】:

      【解决方案2】:
      DECLARE @dat TABLE  (
      id int,
      name varchar(50),
      string varchar(50),
      number int
      )
      
      DECLARE @dat2 TABLE  (
      id int,
      name_col varchar(50),
      val varchar(50)
      )
      
      INSERT INTO @dat (id, name, string, number) VALUES (1,'Name', 'A', -1)
      INSERT INTO @dat (id, name, string, number) VALUES (1,'Age', '', 30)
      INSERT INTO @dat (id, name, string, number) VALUES (1,'Sex', 'Male', -1)
      INSERT INTO @dat (id, name, string, number) VALUES (2,'Name', 'A', -1)
      INSERT INTO @dat (id, name, string, number) VALUES (2,'Age', '', 20)
      INSERT INTO @dat (id, name, string, number) VALUES (2,'Sex', 'Female', -1)
      
      INSERT INTO @dat2
      SELECT [id], [name], [val] = CASE  WHEN number = -1 THEN string ELSE
      CONVERT(varchar,number) END FROM @dat
      
      SELECT * FROM @dat2
      PIVOT
      (
        MAX(val)
        FOR [name_col] IN ([Name],[Age],[Sex])
      )
      AS p
      

      你会得到你所期望的:

      1   A   30  Male
      2   A   20  Female
      

      【讨论】:

        猜你喜欢
        • 2022-01-09
        • 1970-01-01
        • 2013-11-04
        • 1970-01-01
        • 2012-06-20
        • 2018-11-08
        • 1970-01-01
        • 2015-11-09
        • 2015-07-05
        相关资源
        最近更新 更多