SQL Server 2000 中的交叉表查询

发布于 2024-09-12 19:36:00 字数 595 浏览 3 评论 0原文

我希望以前有人尝试过这一点,并且在我进一步之前可以得到一些建议。

我希望在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

秋心╮凉 2024-09-19 19:36:00

如果您确定每个参数项组合最多有一个值,则可以使用简单的 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,就无法根据参数表中的描述返回列名。

If you're sure there's at most one value for each parameter-item combination, you can use a simple 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

You can use min or avg instead of max: 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.

夏有森光若流苏 2024-09-19 19:36:00

我最终使用了一个存储过程(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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文