Newsgroup: it.comp.software.database
Titolo: Problemi GROUP BY con SQL server

Incredibile non mi funziona questa semplicissima query. Il tutto è
provocato dall'inserimento di "GROUP BY sh.prov"
SELECT * FROM sh LEFT JOIN ex ON 
ex.li
 = 
sh.id
 GROUP BY sh.prov ORDER BY
sh.prov
Il database che utilizzo è SQL server, l'errore riportato è:
ODBC Error Code = 37000 (Syntax error or access violation)
[Microsoft][ODBC SQL Server Driver][SQL Server]Column 'showsdb.SHOWID' is
invalid in the select list because it is not contained in either an
aggregate function or the GROUP BY clause.
Sapete dirmi come posso correggerla?
 Fabrizio
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

IL messaggio di errore è questo:
ODBC Error Code = 37000 (Syntax error or access violation)
[Microsoft][ODBC SQL Server Driver][SQL Server]Column '
sh.id
' is invalid
in the select list because it is not contained in either an aggregate
function or the GROUP BY clause.


 Fabrizio
Bye
-- 
Luca Bianchi
Microsoft MVP - SQL Server
SQL Server Conference 2006
http://www.sqlconference.it/
 

 sh.prov
Questo statement è chiaramento errato. Riportano i BOL:
------------------------------------------------------------------------
Quando si specifica GROUP BY, è necessario che l'elenco GROUP BY includa
tutte le colonne di un'espressione non di aggregazione dell'elenco di
selezione oppure che l'espressione GROUP BY corrisponda esattamente
all'espressione dell'elenco di selezione.
------------------------------------------------------------------------
Di conseguenza, non puoi scrivere "select *" ma devi indicare
esplicitamente i nome delle colonne che vuoi. Le stesse colonne devi
specificarle anche dopo la clausola "group by", a meno che non si tratti
di aggregazioni.
Esempio1:
"select campo1, campo2, campo3 from tab1 group by campo1, campo2, campo3"
Esempio2:
"select campo1, campo2, sum(campo3) as tot from tab1 group by campo1,
campo2"
-- 
David Martin

Grazie Luca,
Allora.. ho seguito la tua istruzione ma mi manca un pezzo alla fine.
Ricapitolando, io ho questa quesry
SELECT sh.prov, 
sh.id
 FROM sh LEFT JOIN ex ON 
ex.li
 = 
sh.id
 GROUP BY
sh.prov ORDER BY sh.prov
sh.prov -> campo nome provincia (es. Milano)
sh.id
 -> campo id provincia (es. 02)
E' ovvio che il campo 
sh.id
 è univico ma per evitare errori inserisco una
funzione da te consigliata. Quindi scrivo:
SELECT sh.prov, MAX (
sh.id
) FROM sh LEFT JOIN ex ON 
ex.li
 = 
sh.id
 GROUP BY
sh.prov ORDER BY sh.prov
Purtroppo mi da ancora errore:
Error resolving parameter 
prov.id
The column ID is not present in the query named PROV. It is likely that
you have misspelled the name of the column.
The error occurred while processing an element with a general identifier
of (#
prov.id#
), 
In pratica questo accade quando voglio stampare a video il valore della
colonna id. (es. MI)
Presumo che sia dovuto al fatto che durante l'interrogazione metto la
funzione MAX() e poi quando la vado ad estrarre non metto più niente. Cosa
devo fare?
Grazie ancora.
Fabrizio09


 of (#
prov.id#
), 
Io proverei (e prenderei l'abitudine, se fossi in te) a scrivere i nomi
dei campi racchiusi da un delimitatore, ovvero:
SELECT sh.[prov], MAX (sh.[id]) FROM sh LEFT JOIN ex ON ex.[li] =
sh.[id] GROUP BY sh.[prov] ORDER BY sh.[prov]
...e dopo questa modifica vediamo che errore ti da, quindi e riparliamo.
-- 
David Martin