2014-01-20 57 views
1

我有一个类似于下面的表。它的一个项目表和他们相关的仓位。有些可能有多个分仓位置,并且他们都会有首选仓位或主分仓位置。我如何运行查询来将行转置为列并确定首选哪个首选的bin?sql pivot数据行到列

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 - 

我已经使用了旋转功能,没有运气尝试。

谢谢,

+0

既然你有tsql作为标记,这是SQL Server吗?如果是这样,什么版本? – Dan

+0

“Bin3”的逻辑是什么? –

+1

对于物品可以在的箱数有固定的限制吗?或者它是动态的? –

回答

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;