【问题标题】:Pivot Table with group by具有分组依据的数据透视表
【发布时间】:2012-12-13 06:00:44
【问题描述】:
select out.a,out.b from out
pivot (count([event]) for [date] in ([Mon],[Tues])) as event_count
group by out.a,out.b

在执行此查询时,我收到以下错误:

无法绑定多部分标识符 out.a,out.b

【问题讨论】:

    标签: sql sql-server sql-server-2008 pivot


    【解决方案1】:

    删除GROUP BY 子句,以及ab 列的别名out,如下所示:

    select a, b, [Mon], [Tues] 
    from out
    pivot 
    (
      count([event]) 
      for [date] in ([Mon],[Tues])
    ) as event_count;
    

    SQL Fiddle Demo

    注意:当使用PIVOT表操作符时,你不需要显式指定分组元素,在你的情况a, b或源表中,你需要删除它从查询和源表。 PIVOT 运算符将自动计算出您想要 GROUP BY 的列,这些列是在您的情况下未在 date 或聚合元素 event 中指定的列,其余的将是分组列。

    这就是为什么您必须明确列出列名而不是 FROM out 的原因,以防表 out 包含除 a, b, date, event 之外的列。在这种情况下,您必须这样做:

    select a, b, [Mon], [Tues] 
    from
    (
       SELECT a, b, "date", "event" 
       FROM out
    ) t
    pivot 
    (
      count([event]) 
      for [date] in ([Mon],[Tues])
    ) as event_count;
    

    【讨论】:

      【解决方案2】:

      听起来您需要在 [Mon] 上替换 out.a,在 [Tues] 上替换 out.b

      SELECT [Mon], [Tues]
      FROM out
      PIVOT (
             COUNT([event]) FOR [date] in ([Mon],[Tues])
             ) AS event_count
      

      SQLFiddle上的演示

      【讨论】:

        【解决方案3】:

        我不确定您的查询,但可能这就是您要查找的内容

        Select a,b, [Mon],[Tues] from 
        (
          Select a,b,date,event from out 
          group by a,b,date,event
        )L
        PIVOT
        (
          count(event) for [date] in ([Mon],[Tues]) 
        )  event_count
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-08-21
          • 1970-01-01
          • 1970-01-01
          • 2016-04-14
          • 2021-03-28
          • 1970-01-01
          • 2022-12-14
          • 1970-01-01
          相关资源
          最近更新 更多