sql将数据行转换为列

时间:2014-01-20 18:32:08

标签: sql sql-server tsql pivot

我有一张类似下面的表格。它是一个项目表及其相关的仓位。有些可能有多个bin位置,并且所有bin位置都有首选或主要bin位置。如何运行查询以将行转置为列并确定首选bin作为第一个?

Item   Bin   Preferred
A      2       Yes
A      3       No
A      1       No
B      3       Yes
B      4       No

输出应如下所示:

Item   BinPreferred  Bin2 Bin3
 A     2               3    1
 B     3               4    -

我尝试过使用PIVOT功能但没有运气。

谢谢,

1 个答案:

答案 0 :(得分:0)

这应该是一个项目具有最大数量的3个箱子的情况的解决方案。 如果我是对的,它将选择主箱和另外两个不相等的箱子。

Select distinct 
mainbin.item,
mainbin.bin as binpreffered,
bin2.bin as bin2,
bin3.bin as bin3 
from table mainbin  
left join table bin2 on (mainbin.id=bin2.id)
left join table bin3 on (mainbin.id=bin3.id)
where mainbin.preffered='Yes' 
and bin2.preffered='No' 
and bin3.preffered='No'
and bin2.id<>bin3.id;