2010-08-06 301 views
3

我希望有人以前曾嘗試過,我可以在我進一步討論之前得到一些建議。SQL Server 2000中的交叉表查詢

我期待產生類似SQL服務器交叉表查詢2000

我有類似如下的表結構的東西:

Item  Item_Parameter  Parameter 
id   item_id    id 
desc  parameter_id  desc 
      value 

我所希望做的是通過查詢/存儲過程來平整數據,使建築報告更加簡單。

理想的解決方案會產生的結果,如:

   Parameter.desc[0]  Parameter.desc[1]  Parameter.desc[3]... 
item.id[0] Item_Parameter.value Item_Parameter.value Item_Parameter.value 
item.id[1] Item_Parameter.value Item_Parameter.value Item_Parameter.value 

回答

5

如果您肯定有一個在每個參數項組合最多一個值,你可以用一個簡單的group by

select item_id 
,  max(case when parameter_id = 1 then value) Par1 
,  max(case when parameter_id = 2 then value) Par2 
,  max(case when parameter_id = 3 then value) Par3 
from item_paramenter 
group by 
     item_id 

您可以使用minavg而不是max:它不重要,因爲每個item_id只有一個參數值,每個參數只有一個值,

沒有動態SQL,無法根據參數表中的描述返回列名稱。

+0

對於多久添加一個參數,這可能是最佳解決方案。關於動態解決方案的任何建議? – Mervyn 2010-08-06 13:02:58

+0

@Mervyn:DanP發佈了一個良好動態解決方案的鏈接 – Andomar 2010-08-06 14:24:21

+0

我遇到了以下我正在修改的存儲過程。 http://www.sqlteam.com/article/dynamic-cross-tabs-pivot-tables它似乎做我到目前爲止尋找。我可以看到,儘管我將遇到最大varchar長度的問題。 – Mervyn 2010-08-06 15:58:26