我有一个表,我正在使用PIVOT,它可以正常工作并返回数据透视列的数据,但我想在绑定到旋转列的行中有其他列。
示例:
ID, PhoneType (column to PIVOT), PhoneNumber (value to be pivoted), PhoneAttribute1, PhoneAttribute2, PhoneAttribute3.
1, Cell, 123456789, call, dontcall, pleasecall
1, work, 123456780, call2, dontcall2, pleasecall2
2, Home, 123456782, call2, dontcall2, pleasecall2
当我转动数据(没有属性列)时,我得到输出:
ID, CELL, Work, Home
1, 123456789, 123456780, NULL
2, NULL, NULL, 123456782
哪个是正确的,但我想将其他attributcolumns添加到列表中,以便将每个属性与每个电话号码绑定,如下所示:
ID, CELL, Work, Home, CELLPhoneAttribute1, CELLPhoneAttribute2, CELLPhoneAttribute3, WorkPhoneAttribute1, WorkPhoneAttribute2, WorkPhoneAttribute3,......
这可能吗?
我可以使用连接来实现,但这可能很麻烦,如果我添加更多的语音类型,它会变得更大。
有什么建议吗?
答案 0 :(得分:1)
您还可以使用条件聚合。在这种情况下,不需要连接。不是最漂亮的,但也不难延长。
select id,
max(case when phone_type = 'Cell' then PhoneNumber end) as CELL,
max(case when phone_type = 'work' then PhoneNumber end) as Work,
max(case when phone_type = 'Home' then PhoneNumber end) as Home,
max(case when phone_type = 'Cell' then PhoneAttribute1 end) as CELLPhoneAttribute1,
max(case when phone_type = 'Cell' then PhoneAttribute2 end) as CELLPhoneAttribute2,
max(case when phone_type = 'Cell' then PhoneAttribute3 end) as CELLPhoneAttribute3,
max(case when phone_type = 'work' then PhoneAttribute1 end) as WorkPhoneAttribute1,
max(case when phone_type = 'work' then PhoneAttribute2 end) as WorkPhoneAttribute2,
max(case when phone_type = 'work' then PhoneAttribute3 end) as WorkPhoneAttribute3,
max(case when phone_type = 'Home' then PhoneAttribute1 end) as HomePhoneAttribute1,
max(case when phone_type = 'Home' then PhoneAttribute2 end) as HomePhoneAttribute2,
max(case when phone_type = 'Home' then PhoneAttribute3 end) as HomePhoneAttribute3
from tbl
group by id
答案 1 :(得分:0)
据我所知,如果不使用几个常规连接,这是不可能的。
生成的数据表的目的是什么?大多数报告工具都可以让您轻松完成此分组。例如,将SSRS中的行级和列级分组组合在表矩阵上。