2010-08-06 327 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