在表格中旋转单个字段

时间:2015-05-19 15:27:24

标签: sql-server pivot-table

我有一个以下结构的表格:

名称 类型 线 唯一身份 键 值

我需要选择除UniqueID字段以外的所有字段,并在结果集中添加一个键'UniqueID'和一个带有UniqueID值的Value字段。

例如,如果我有三条记录:

Name            Type      Line   UniqueID      Key       Value  
___________________________________________________________________
John Doe        Employee   2     test333       SSN       123-45-2345
John Doe        Employee   3     test333       Address   555 Rodeo Drive
Jane Doe        Visitor    2     test444       SSN       345-67-8907

我的结果集必须是:

Name         Type       Line  Key        Value  
___________________________________________________
John Doe     Employee    2    UniqueID   test333
John Doe     Employee    2    SSN        123-45-2345
John Doe     Emplyee     3    Address    555 Rodeo Drive
Jane Doe     Visitor     2    UniqueID   test444
Jane Doe     Visitor     2    SSN        345-67-8907

我是否使用枢轴?有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

至少对我来说,这是一个奇怪的要求。但无论如何,你可以通过几种方式来接近它。一种方法是使用交叉申请:

select
name,
type,
line,
newkey,
newvalue
from 
table1
cross apply
( values
  ('UniqueID',uniqueid),
  ('SSN',Value),
  ('Address',Value)
) c
(newkey,newvalue)

SQL Fiddle demo

根据你的评论,我们将把联合所有的方法都扔掉。

这是一个令人难以置信的丑陋和kludgy的univot,结合了一个联盟(以获得独特的ID):

select
name,
type,
line,
newkey2,
newvalue
from
(select
name,
type,
line,
[key],
[value]
from table1) t1
unpivot
(
  newvalue for newkey in ([Value])  
 ) u
 unpivot
 (newkey2 for newvalue2 in ([key])) u2
 union all
 select
 name,
 type,
 line,
 'UniqueID',
 Uniqueid
 from
 table1

Unpivot SQL Fiddle