我有一个以下结构的表格:
名称 类型 线 唯一身份 键 值
我需要选择除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
我是否使用枢轴?有人能指出我正确的方向吗?
答案 0 :(得分:1)
至少对我来说,这是一个奇怪的要求。但无论如何,你可以通过几种方式来接近它。一种方法是使用交叉申请:
select
name,
type,
line,
newkey,
newvalue
from
table1
cross apply
( values
('UniqueID',uniqueid),
('SSN',Value),
('Address',Value)
) c
(newkey,newvalue)
根据你的评论,我们将把联合所有的方法都扔掉。
这是一个令人难以置信的丑陋和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