使用Pivot或CTE来水平化查询

Mik*_*ike 2 sql sql-server-2008

我正在使用sql 2008我的数据集看起来像

Entity    Type1    Type2    Balance 
1         A        R        100
1         B        Z        200
1         C        R        300
2         A        X        1000
2         B        Y        2000
Run Code Online (Sandbox Code Playgroud)

我的输出应该是这样的

Entity  A-Type2 A-Balance B-Type2 B-Balance C-Type2 C-Balance 
1       R       100       Z       200       R       300
2       X       1000      Y       2000              0
Run Code Online (Sandbox Code Playgroud)

现在我开始编写一个数据透视查询,我想我可以使用MAX,因为每个Entity/Type1组合应该有一条记录.但无法弄清楚如何在一个支点中做两个字段.这可能吗?CTE可以帮助解决这个问题吗?

tro*_*roy 5

最简单的是MAX的想法,但有一个CASE语句,例如:

SELECT
  Entity,
  MAX(CASE WHEN Type1 = 'A' THEN Type2 ELSE NULL END) AS AType2,
  MAX(CASE WHEN Type1 = 'A' THEN Balance ELSE NULL END) AS ABalance,
  MAX(CASE WHEN Type1 = 'B' THEN Type2 ELSE NULL END) AS BType2,
  MAX(CASE WHEN Type1 = 'B' THEN Balance ELSE NULL END) AS BBalance,
  MAX(CASE WHEN Type1 = 'C' THEN Type2 ELSE NULL END) AS CType2,
  MAX(CASE WHEN Type1 = 'C' THEN Balance ELSE NULL END) AS CBalance
FROM
  ...
GROUP BY
  Entity
Run Code Online (Sandbox Code Playgroud)

换句话说,仅在Type1是特定值时使用该值(其他Type1值为null).