Newsgroup: it.comp.lang.visual-basic
Titolo: Aiuto per una Select di raggruppamento

Ciao.
Ho bisogno di un aiuto per una Select che proprio non riesco a fare.
Per semplificare diciamo che la mia tabella PostiSale è composta da tre
campi Id, IdSala, Stato
IdSala è l'identificativo di una sala che può contentere più posti.
Ogni posto può avere tre stati: L (libero), O (occupato), P (prenotato)
Avrei bisogno di una Select che, dato l'Id della sala, mi restituisca un
valore numerico da cui riesco a capire se i posti della sala sono:
- Tutti Liberi
- Tutti Occupati
- Alcuni Liberi e alcuni occupati
- Qualche posto prenotato
Sono riuscito ad ottenere le informazioni sul numero di posti con il
relativo stato con questa Query:
SELECT     IdSala, COUNT(Stato) AS Expr1, Stato
FROM         dbo.PostiSale
GROUP BY Stato, IdSala
HAVING      (Stato = 'O') OR
                      (Stato = 'L') OR
                      (Stato = 'P')
Questo mi torna tre record con il relativo numero di posti liberi, occupati
e prenotati.
C'è un modo per avere un record unico legato all'Id della sala che mi dia le
informazioni che ho specificato prima?
Grazie per l'aiuto.
Ciao
-- 
Skysurfer


Saluti, Il Sora!!
p.S. l'sql andrà adattato al DB  che usi..non o se funziona così com'è...

Non capisco perchč tu voglia far fare delle moltiplicazioni inutili,
ma anche capendolo non risolvi il suo problema.
Presunmo che Sky abbia bisogno di un record solo con
le informazioni e non di tre record distinti.
Ovviamente potrebbe trattare i tre record come uno solo a
livello applicativo, ma non sta a noi capire il perchč non vuole.
Quello che deve fare č una query di questo tipo.
select a.idsala
        (select count(stato) from postisale b where stato = 'O' where
b.idsala = a.idsala) as Occupato,
         (select count(stato) from postisale c where stato = 'P' where
c.idsala = a.idsala) as Prenotato,
        (select count(stato) from postisale d where stato = 'L' where
d.idsala = a.idsala) as Libero
from idsala a
where a.idsala = ?
Non l'ho provata perchč ho il server con sql spento, ma dovrebbe
essere quello che cerchi. La prossima volta posta i ddl, cosě č anche
piů facile aiutarti.
L'having invece che hai chiamato in causa, non ti č utile, perchč comunque
stai chiedendo di filtrarti i record per gli stessi (unici) criteri che sono
contenuti nel set di dati restituito.
HTH
Andrea

 Andrea
Grazie ad entrambi per la risposta.
Andrea, il tuo metodo mi torna 3 campi con le informazioni (e questo può
andarmi bene per un altro scopo). E' possibile aggiungere anche un quarto
campo calcolato utilizzando il valore dei primi tre campi?
Avevo pensato di utilizzare dei valori in potenza di due, quindi se il campo
Libero contiene un numero superiore a 0 devo aggiungere 1 al campo
risultato, se il campo Occupato contiene un numero superiore a 0 devo
aggiungere 2 al campo risultato e lo stesso per il campo Prenotato
aggiungendo 4.
In questo modo posso rendermi conto esaminando un solo campo se esistono
posti liberi e/o occupati e/o prenotati.
Per esempio se il campo Risultato vale 3, significa che ho alcuni posti
Liberi ed alcuni Prenotati, se vale 4 significa che sono tutti prenotati.
Grazie ancora e ciao.
-- 
Skysurfer

 Grazie per l'aiuto.
Prego.
Ciao!
-- 
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://mvp.support.microsoft.com
http://italy.mvps.org

 Grazie ancora e ciao.


 su una sola riga il numero di posti suddivisi per stato.
[...]
Grazie mille... provo subito
Ciao
-- 
Skysurfer


Ho messo le "union" fra le Select, intendevo unire i tre valori, ma in
questo modo non ci si riesce.... :-))
L'intento era di ottenere appunto un solo valore che potesse essere
decifrato. In effetti era da considerare solo l'idea...come detto all'inizio
Saluti, Il Sora!!