2013-12-09 28 views
0
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条记录。当我运行我的查询时,需要很多时间。有人可以建议优化查询或最佳选择来达到上述结果吗?如果问题或疑问不明确,请让我知道。将垂直值映射到SQL Server中的水平行

编辑: ItemID上有一个索引。你说过枢轴。我如何使用数据透视表来获得我的结果?而且还有10个头,而不是3.这里我只提到3.

+0

你有'ItemID'字段的indexe吗? – valex

+0

是3的标头的最大数量? – Jayvee

回答

0

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

ItemDetails的目的是什么? 你可以有一个名为itemHeader和类型的列。

为什么你需要在一个go.why不使用分页运行50000个以上行?

你也可以在前端支点东西。