【问题标题】:Crosstab Query in SQL Server 2000SQL Server 2000 中的交叉表查询
【发布时间】:2010-08-07 00:54:03
【问题描述】:

我希望之前有人尝试过,并且在我继续之前可以得到一些建议。

我希望在 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   

【问题讨论】:

    标签: sql sql-server sql-server-2000


    【解决方案1】:

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

    【讨论】:

    • 对于添加参数的频率,这可能是最好的解决方案。对动态解决方案有何建议?
    • 我遇到了以下我目前正在修改的存储过程。 sqlteam.com/article/dynamic-cross-tabs-pivot-tables 到目前为止,它似乎在做我正在寻找的东西。我可以看到我会遇到最大 varchar 长度的问题。
    【解决方案2】:

    我最终使用存储过程 (http://www.sqlteam.com/article/dynamic-cross-tabs-pivot-tables) 来动态创建 sql 语句。

    感谢丹和安多玛

    【讨论】:

      猜你喜欢
      • 2013-09-17
      • 2014-06-22
      • 1970-01-01
      • 2014-04-01
      • 2012-06-22
      • 2017-10-20
      • 1970-01-01
      • 2011-11-20
      • 2014-10-23
      相关资源
      最近更新 更多