SQL Server 2000 中的交叉表查询

3
我希望有人在我继续之前已经尝试过这个,可以给我一些建议。
我想要制作类似于SQL Server 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   
2个回答

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,无法根据参数表中的描述返回列名。

对于参数添加的频率,这可能是最佳解决方案。有关动态解决方案的建议吗? - Mervyn
我遇到了一个正在修改的存储过程。http://www.sqlteam.com/article/dynamic-cross-tabs-pivot-tables 目前看来它似乎可以满足我的需求。不过,我可以看到我将会遇到最大varchar长度的问题。 - Mervyn

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接