SQL Server 2000中的交叉表查询
问题描述:
我希望有人以前曾尝试过,我可以在我进一步讨论之前得到一些建议。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
答
我结束了使用存储过程(http://www.sqlteam.com/article/dynamic-cross-tabs-pivot-tables)动态创建一个sql语句。
感谢Dan和Andomar
答
如果您肯定有一个在每个参数项组合最多一个值,你可以用一个简单的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
您可以使用min
或avg
而不是max
:它不重要,因为每个item_id只有一个参数值,每个参数只有一个值,
没有动态SQL,无法根据参数表中的描述返回列名称。
对于多久添加一个参数,这可能是最佳解决方案。关于动态解决方案的任何建议? – Mervyn 2010-08-06 13:02:58
@Mervyn:DanP发布了一个良好动态解决方案的链接 – Andomar 2010-08-06 14:24:21
我遇到了以下我正在修改的存储过程。 http://www.sqlteam.com/article/dynamic-cross-tabs-pivot-tables它似乎做我到目前为止寻找。我可以看到,尽管我将遇到最大varchar长度的问题。 – Mervyn 2010-08-06 15:58:26