【问题标题】:Need help to PIVOT/UNPIVOT some data in SQL需要帮助 PIVOT/UNPIVOT SQL 中的一些数据
【发布时间】:2016-12-21 05:38:24
【问题描述】:

我在尝试在 MSSQL 中获取一些数据时遇到了一些困难。这是我所拥有的:

SO_ID | SO_DATE | WAGE_A | WAGE_B | WAGE_B_DUR | 
1     | 12/12/06| 100    |   200  |    15      | 
2     | 10/10/06| 150    |   250  |    10      |

我想要什么:

SO_ID | SO_DATE | WAGE_TYPE | AMOUNT | DURATION |
1     | 12/12/06| WAGE_A    | 100    | NULL     |
1     | 12/12/06| WAGE_B    | 200    | 15       |
2     | 10/10/06| WAGE_B    | 250    | 10       |
2     | 10/10/06| WAGE_A    | 150    | NULL     |

如果您能给我一些帮助或建议(包括更改第一个表),我将不胜感激。

【问题讨论】:

    标签: sql-server pivot unpivot


    【解决方案1】:

    试一试:

    CREATE TABLE try_val(SO_ID int, SO_DATE int, WAGE_A int, WAGE_B int, WAGE_B_DUR int) 
    
    insert into try_val values (1     , 12/12/06, 100    ,   200  ,    15      ) 
    insert into try_val values (2     , 10/10/06, 150    ,   250  ,    10      )
    
    
    select SO_ID,SO_DATE,'WAGE_A' AS WAGE_TYPE,WAGE_A AS AMOUNT,NULL AS DURATION from try_val 
    UNION ALL
    select SO_ID,SO_DATE,'WAGE_B' AS WAGE_TYPE,WAGE_A AS AMOUNT,WAGE_B_DUR  AS DURATION from try_val
    ORDER BY SO_ID
    

    【讨论】:

      【解决方案2】:

      您可以将简单的 SELECT 与 UNION ALL 一起使用,如下所示

      select
          SO_ID,
          SO_DATE,
          WAGE_TYPE = 'WAGE_A',
          AMOUNT = WAGE_A,
          DURATION = WAGE_B_DUR
      from myData
      union all
      select
          SO_ID,
          SO_DATE,
          WAGE_TYPE = 'WAGE_B',
          AMOUNT = WAGE_B,
          DURATION = WAGE_B_DUR
      from myData
      order by SO_ID
      

      【讨论】:

      • 您的答案与@Ranjana 的答案一样有效,仅在第 6 行不同,我应该将其更改为 NULL/0。还是谢谢
      猜你喜欢
      • 2010-10-23
      • 1970-01-01
      • 1970-01-01
      • 2022-11-28
      • 2011-12-12
      • 2010-12-16
      • 2011-03-26
      • 2011-01-13
      • 1970-01-01
      相关资源
      最近更新 更多