首页 > 解决方案 > SQL Server 将行转换为列

问题描述

我正在寻找一种在 SQL Server 中将行转换为列的方法,我尝试过 pivot 但仍然没有得到我想要的结果。

样品表

----------------------------------------
|  Code  |  Value  |  Status  |  Desc  |
----------------------------------------
| 000010 |    2    |   Trx1   |  X001  |
| 000010 |    1    |   Trx2   |  X001  |
| 000010 |    2    |   Trx1   |  X002  |
| 000010 |    2    |   Trx2   |  X002  |
| 000010 |    1    |   Trx1   |  X003  |
| 000010 |    1    |   Trx2   |  X003  |

从那张表中,我想得到类似的结果

----------------------------------------
|  Code  | Status1 | Status2  |  Desc  |
----------------------------------------
| 000010 |    2    |     1    |  X001  |
| 000010 |    2    |     2    |  X002  |
| 000010 |    1    |     1    |  X003  |

我怎样才能建立这样的结果?

已经找到我自己想要的结果,谢谢

谢谢你

标签: sql-server

解决方案


CREATE TABLE #Table1
    ([Code] int, [Value] int, [Status] varchar(4), [Desc] varchar(4))
;

INSERT INTO #Table1
    ([Code], [Value], [Status], [Desc])
VALUES
    (000010, 2, 'Trx1', 'X001'),
    (000010, 1, 'Trx2', 'X001'),
    (000010, 2, 'Trx1', 'X002'),
    (000010, 2, 'Trx2', 'X002'),
    (000010, 1, 'Trx1', 'X003'),
    (000010, 1, 'Trx2', 'X003')
;
  SELECT FORMAT([Code],'000000')[Code] ,MAX(CASE WHEN [STATUS]='Trx1' THEN [Value] END) AS [Value1] ,
              MAX(CASE WHEN [STATUS]='Trx2' THEN [Value] END) AS [Value2],[Desc]
FROM #Table1
GROUP BY [Code],[Desc]

输出

Code    Value1  Value2   Desc
10        2       1      X001
10        2       2      X002
10        1       1      X003

推荐阅读