如何为此表选择PIVOT?

时间:2015-05-30 05:41:28

标签: sql-server

我有一张这样的表:

Id          Code                 Value
----------- -------------------- -----------
1           A                    100
2           B                    100
3           C                    220
4           A                    150
5           C                    300
6           D                    120
7           E                    120

这是我的期望:

Code1       Value1      Code2       Value2      Code3       Value3
----------- ----------- ----------- ----------- ----------- -----------
A           100         B           100         C           220
A           150         C           300         D           120
E           120

我应该在这种情况下使用PIVOT(以及如何执行此操作)或正常选择查询吗?

2 个答案:

答案 0 :(得分:2)

这也不是使用数据透视表,但是如果您需要将项目分组为按ID排序的3个组,并且ID有间隙,就像有时会发生一样,这应该这样做:

select
  ROW,
  max(case when COL = 0 then Code end) as Code1,
  max(case when COL = 0 then Value end) as Value1,
  max(case when COL = 1 then Code end) as Code2,
  max(case when COL = 1 then Value end) as Value2,
  max(case when COL = 2 then Code end) as Code3,
  max(case when COL = 2 then Value end) as Value3 
FROM (
  select
    (row_number() over (order by ID)-1) % 3 as COL,
    (row_number() over (order by ID)-1) / 3 as ROW,
    Code,
    Value
  from
    data
) X
group by ROW

这将根据bit_number增加ID来计算行号和列号,然后使用group by将结果拆分为3个组。

SQL Fiddle

答案 1 :(得分:1)

也许n在这里没用。

PIVOT