如何在不使用Pivot命令的情况下在SQL中转动数据

时间:2018-04-16 16:59:31

标签: sql excel pivot

我当前表的样本:

ID类型

1 A

1 B

2 A

2 B

2 C

期望的输出:

ID One Two Three

1 A B Null

2 A B C

基本上,我想将列Type中的值转换为新列(一,二,三等),并将值放在这些列的类型中。每个ID只有一行而不是多行。

由于perm的限制,我无法在SQL中使用PIVOT语句,但是我可以用另一种方法在SQL或Excel中创建它吗?

2 个答案:

答案 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)或更高,我相信这是必需的。