title: SQL Server 2005 error when grouping using subquery
body: <p>Using SQL Server 2005 I'm trying to group based on a case statement with a subquery, but I'm getting an error ("Each GROUP BY expression must contain at least one column reference.
  "). I can work round it quite easily, but can anyone explain the error? I've got a column reference to #header.header.</p>
  
  <pre><code>create table #header (header int)
  create table #detail (header int, detail int)
  
  insert into #header values (1)
  insert into #header values (2)
  insert into #header values (3)
  
  insert into #detail values (1, 1)
  insert into #detail values (2, 1)
  
  --error: Each GROUP BY expression must contain at least one column reference.
  select case when exists (select 1 from #detail where #detail.header = #header.header) then 1 else 0 end hasrecords from #header
  group by case when exists (select 1 from #detail where #detail.header = #header.header) then 1 else 0 end
  
  --results I want
  select hasrecords, count(*) from
  (
      select case when exists (select 1 from #detail where #detail.header = #header.header) then 1 else 0 end hasrecords from #header
  ) hasrecords
  group by hasrecords
  
  drop table #header
  drop table #detail
  </code></pre>
  
  <p>[edit] Note (in response to comment) correlated and non-correlated subqueries:</p>
  
  <pre><code>--correlated
  select header, case when exists (select 1 from #detail where #detail.header = #header.header) then 1 else 0 end hasrecords from #header
  
  --non-correlated
  select #header.header, case when count(#detail.header) &gt; 0 then 1 else 0 end hasrecords from #header left join #detail on #header.header = #detail.header group by #header.header
  </code></pre>