将垂直值映射到SQL Server中的水平行

时间:2013-12-09 13:00:29

标签: sql-server

I have two tables. First is ItemDetails and second is ItemHeaders.

ItemHeaders:
ItemID ItemName
1      Apple
2      Orange
3      Grapes

ItemDetails:
ID ItemHeader1 ItemHeader2 ItemHeader3
1  1           2           1
2  3           2           1
3  2           1           2
4  2           3           3

OutPut:  
ID   Categroy1   Categroy2  Category3
1    Apple       Orange     Apple
2    Grapes      Orange     Apple      
3    Orange      Apple      Orange
4    Orange      Grapes     Grapes

My Query:    
Select ID, i1.ItemName as Categroy1, i2.ItemName as Categroy2, i3.ItemName as Categroy3
From ItemDetails d
Left Join  ItemHeaders i1 on d.ItemHeader1 = i1.ItemID
Left Join  ItemHeaders i2 on d.ItemHeader2 = i2.ItemID
Left Join  ItemHeaders i3 on d.ItemHeader3 = i3.ItemID

问题:这是示例数据,我在ItemDetails中有50,000条记录。当我运行我的查询时,需要很多时间。有人可以建议优化查询或最佳选项来实现上述结果吗?如果问题或疑问不明确,请告诉我。

编辑:ItemID上有一个索引。你说过Pivot。如何使用pivot获取结果?而且还有10个标题而不是3个。这里我只提到了3个。

1 个答案:

答案 0 :(得分:0)

除了index.hope之外,左连接是正确的。我的意思是你的要求你不能使用内连接。

ItemDetails的目的是什么? 你可以有一个名为itemHeader的列并输入。

为什么你需要一次运行50000及以上的行。为什么不使用分页?

你也可以在前端转动物品。