我当前表的样本:
1 A
1 B
2 A
2 B
2 C
期望的输出:
1 A B Null
2 A B C
基本上,我想将列Type中的值转换为新列(一,二,三等),并将值放在这些列的类型中。每个ID只有一行而不是多行。
由于perm的限制,我无法在SQL中使用PIVOT语句,但是我可以用另一种方法在SQL或Excel中创建它吗?
答案 0 :(得分:0)
你可以这样做:
select id, max(case when type='a' then type else null end) one, max(case when type='b' then type else null end) two,
max(case when type='c' then type else null end) three
from #temp1
group by id
答案 1 :(得分:0)
这是我见过它的常用方法:
SELECT DISTINCT t.ID,
a.Type AS "One",
b.Type AS "Two",
c.Type AS "Three"
FROM Table t
LEFT JOIN Table a
ON a.ID = t.ID
AND a.Type = 'A'
LEFT JOIN Table b
ON b.ID = t.ID
AND b.Type = 'B'
LEFT JOIN Table c
ON c.ID = t.ID
AND c.Type = 'C'
与PIVOT相比效率非常低。与使用@DanielMarcus提供的MAX()
方法相比,此方法的唯一优势是,即使列的数据类型不支持聚合,此方法仍然有效,但聚合方法可能表现更好。
那就是说,如果你有SELECT的权限,那么我不明白为什么你没有PIVOT的权限。唯一的问题可能是您正在使用的数据库没有将其兼容级别设置为90(SQL Server 2005)或更高,我相信这是必需的。