2013-12-09 65 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個以上行?

你也可以在前端支點東西。