在表中旋转一个字段



i有以下结构的表:

名称类型线唯一身份钥匙值

我需要选择除uniquarID字段以外的所有字段,并添加一个键'uniquarId'和一个具有唯一值的值字段。

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

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

我使用枢轴吗?谁能将我指向正确的方向?

至少对我来说,这是一个奇怪的请求。但是无论如何,您可以采取几种方法。一种方法是使用交叉应用:

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

SQL小提琴演示

根据您的评论,我们将把工会全部方法。

这是一个令人难以置信的丑陋和kludgy的unvivot,结合了一个联合(获得独特的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

Unvivot SQL小提琴

最新更新