Newsgroup: it.comp.software.database
Titolo: Comando Sql COUNT

Ciao a tutti,
ho cercato tra i vari post ma non ho trovato ancora una soluzione.
Vorrei ricavare da una colonna il totale dei record e poi contare quanti
sono i record il valore 1 e con il valore 2.
Non sono riuscito a utilizzare un'unica istruzione sql ma solo istruzioni
separate, nemmeno facendo la union tra due o tre istruzioni il risultato
non cambia... avete consigli in merito?
Esempio:
COLONNA RUOLO
     1
     1
     1
     2
     2
Da questa colonna vorrei sapere quanti record sono contenuti (quindi 5),
di cui 3 record contengono il valore 1 e 2 record contengono il valore 2.
Finora ho utilizzato la seguente sintassi ma il risultato non è corretto...
SELECT 
COUNT (COLONNA_RUOLO) as Totale,
COUNT (COLONNA_RUOLO) as UNO,
COUNT (COLONNA_RUOLO) as DUE
 FROM MIA_TABELLA
WHERE Nome LIKE 'PIPPO' and COLONNA_RUOLO = 1 and COLONNA_RUOLO = 2
Group by Nome
Vi ringrazio per le risposte.
Sparta
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it



 sono i record il valore 1 e con il valore 2.
Così dovrebbe funzionare...
select count(*),'Totale' from miatabella where 1=1
union
select count(*),'Solo 1' from mia tabella where colonna_ruolo = 1
union
select count(*),'Solo 2' from mia tabella where colonna_ruolo = 2

 select count(*),'Solo 2' from mia tabella where colonna_ruolo = 2
Grazie mille! 
così infatti funziona! ma c'è n'aggiunta che vorrei fare e che pare al
momento non funzionare...
cioè vorrei selezionare nella colonna i valori solo 1 riferiti però ad una
precisa persona... 
Esempio
NOME       COLONNA RUOLO
 
PIPPO             1
PLUTO             1
PAPERINO          1
PIPPO             1
PIPPO             2
Vorrei sapere quanti valori di colonna ruolo ci sono per PIPPO e di questi
quanti valori 1 e quanti valori 2.
La funzione di cui sopra elaborata in questo modo mi restituisce tutti
valori a zero. Dove sbaglio?
select count(*),'Totale' from mia_tabella where 1=1
union
select count(*),'Solo 1' from mia_tabella where colonna_ruolo = 1 and nome
like 'pippo%'
union
select count(*),'Solo 2' from mia_tabella where colonna_ruolo = 2 and nome
like 'pippo%'
Grazie ancora per l'aiuto...


> Torakiki


Puoi anche fare un crosstab:
select
    nome,
    count( case when colonna_ruolo = 1 then colonna_ruolo else null end) as 'uno',
    count( case when colonna_ruolo = 2 then colonna_ruolo else null end) as 'due',
    count(*) as 'Totale'
from
   miatabella
group by
    nome
ciao
gmax
-- 
 _  _ _  _
(_|| | |(_|><  The Data Charmer
 _|
http://datacharmer.blogspot.com/

     nome
Ti ringrazio... purtroppo il mio è un database paradox e non supporta
l'istruzione CASE...
hai alternative?
grazie



Non usare like se puoi indicare il valore corretto ed attento al
maiuscolo/minuscolo!
Se hocapito bene questoa query dovrebbe funzionare...
select count(*),'Totale' from mia_tabella nome = 'PIPPO'
union
select count(*),'Solo 1' from mia_tabella where colonna_ruolo = 1 and
nome
= 'PIPPO'
union
select count(*),'Solo 2' from mia_tabella where colonna_ruolo = 2 and
nome
= 'PIPPO'
Ciao
Matteo

 
forse meglio union all...
se due count ritornano lo stesso numero sei fregato
g