Just nu i M3-nätverket
Jump to content

Använda count i WHERE-delen


ns

Recommended Posts

Jag har en SQL fråga som i stora drag ser ut så här:

SELECT count(*) AS antal, ..., P.persId FROM tbl1 AS T, tbl2 AS P

WHERE x = y AND P.persId = T.persId AND ... AND antal = 4

GROUP BY P.persId, ...

ORDER BY Antal DESC

 

Men SQL-server vill inte att jag har med antal = 4 i WHERE-delen, däremot funkar antal bra i ORDER BY. Jag får felmeddelandet:

Server: Msg 207, Level 16, State 3, Line 1

Invalid column name 'antal'.

Går det att lösa?

 

/Niklas

Link to comment
Share on other sites

MattiasCanberger

Kolla upp HAVING i Books Online och se mitt exempel.

 

 

SELECT count(*) AS antal, ..., P.persId FROM tbl1 AS T, tbl2 AS P

WHERE x = y AND P.persId = T.persId AND ...

GROUP BY P.persId, ...

HAVING COUNT(*) > 4

ORDER BY Antal DESC

 

Link to comment
Share on other sites

Magnus Ahlkvist

Kompletterande info:

 

Du kan inte ha alias i WHERE-klausulen, eftersom WHERE-klausulen utvärderas innan kolumnerna i resultatsetet har namngivits. Personligen tycker jag att det många gånger vore praktiskt att kunna använda alias i WHERE-klausulen, eftersom man många gånger har rätt stora jobbiga uttryck (subfrågor och skalära funktioner) som man inte vill skriva två gånger. När man ändrar i SELECT-listan är det inte helt otroligt att man glömmer bort att även ändra i WHERE-klausulen. Finns uttrycket med även i GROUP BY-klausulen kan man vara nästan helt säker på att man får kompileringsfel av sin fråga när den körs, eftersom man någonstans har glömt att ändra på uttrycket och får felet

Column 'dbo.vattenskalle' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

 

--

En röst talade till mig och sade:

”Le och var glad, ty det kunde vara värre”.

Så jag log, och jag var glad.

Och det blev värre.

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...