SQL Server 2000 中的交叉表查询
我希望以前有人尝试过这一点,并且在我进一步之前可以得到一些建议。
我希望在 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
I am hoping that someone has attempted this before and I can get some advice before I go any further.
I am looking to produce something similar to a crosstab query in sql-server 2000.
I have a table structure similar to the following:
Item Item_Parameter Parameter
id item_id id
desc parameter_id desc
value
What I am looking to do is to flatten out the data through a query/stored procedure to make building reports easier.
The ideal solution would produce results such as:
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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您确定每个参数项组合最多有一个值,则可以使用简单的
group by
:您可以使用
min
或avg 而不是
max
:这应该不重要,因为每个 item_id 的每个参数只有一个值,如果没有动态 SQL,就无法根据参数表中的描述返回列名。
If you're sure there's at most one value for each parameter-item combination, you can use a simple
group by
:You can use
min
oravg
instead ofmax
: it shoulnd't matter because there's only one value for each parameter per item_id,Without dynamic SQL, there is no way to return column names based on the description in the parameter table.
我最终使用了一个存储过程(http://www.sqlteam. com/article/dynamic-cross-tabs-pivot-tables)来动态创建一条sql语句。
谢谢丹和安多马尔
I ended up using a stored procedure (http://www.sqlteam.com/article/dynamic-cross-tabs-pivot-tables) to create a sql statement dynamically.
Thanks Dan and Andomar