数据透视表与分组

use*_*r87 7 sql sql-server pivot sql-server-2008

select out.a,out.b from out
pivot (count([event]) for [date] in ([Mon],[Tues])) as event_count
group by out.a,out.b
Run Code Online (Sandbox Code Playgroud)

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

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

Mah*_*mal 7

取出GROUP BY子句和别名outab像这样:

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

SQL小提琴演示

请注意:使用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;
Run Code Online (Sandbox Code Playgroud)