sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server 2005-fel vid gruppering med hjälp av underfråga

Till att börja med, om vi ger det fullständiga felet, bör det stå "Varje GROUP BY-uttryck måste innehålla minst en kolumn som inte är en yttre referens. "

För att förstå felet måste vi klargöra vad som menas med en 'yttre referens'

(Obs:i det här fallet har det ingenting att göra med inre eller yttre sammanfogningar)

Det inre och yttre refererar till huvudfrågan och dess underfrågor. I det här fallet EXISTS är underfrågan och den är en korrelerad underfrågan eftersom den har en yttre referens till #header.header , som refererar till den yttre tabellen #header , medan alla hänvisningar till #detail skulle betraktas som inre referenser.

Så i huvudsak eftersom CASE använder en korrelerad underfråga som refererar till den yttre frågan, då aktiveras feltillståndet, eftersom detta felmeddelande visas när du försöker använda endast uttryck i en GROUP BY-sats som tolkas som yttre referenser.

Undersökningar kan användas i GROUP BY, men inte korrelerade underfrågor.

Förvirrande nog kan samma fel genereras av en enklare fråga som inte har undersökts, t.ex.

select 
 case when header=1 then 1 
      else 0 
 end headeris1, 
 'constant' 
from #header 
group by case when header=1 then 1 else 0 end , 'constant'

eller till och med ersätta konstanten med en @variable

Klar som lera?

Kev



  1. SQLiteDiskIOException med felkod 10:disk I/O-fel

  2. Konvertera IP-adress (IPv4) utan ett heltal i R

  3. MySQL COUNT DISTINKT

  4. Töm ett relationsdatabasschema