View Full Version : SQL : settare a NULL
ciao raga..mi sto esercitando per l'esame di basi e..ho un problema con una query..
"mostrare per ogni impiegato,il suo cf,il cognome e il numero di familiari a carico maschi che ha,se ha familiari a carico, oppure il suo cf e il cognome affiancato da NULL se non ha familiari a carico"
sono riuscita a fare la query, ma come faccio per "affiancare il NULL" a chi non ha familiari?
la query che ho fatto è corretta ed è questa:
select i.cf, i.cognome, count(f.sesso)
from impiegato i left join familiare_a_carico f on i.cf=f.cf_impiegato
where f.sesso='M'
group by i.cf,i.cognome
Puoi usare un CASE
select i.cf, i.cognome, CASE count(f.sesso) WHEN 0 THEN NULL ELSE count(f.sesso) END AS a_carico
from impiegato i left join familiare_a_carico f on i.cf=f.cf_impiegato
where f.sesso='M'
group by i.cf,i.cognome
In pratica se non ci sono parenti a carico ritorna
CF - COGNOME - NULL
(se ho capito bene quello che chiedevi) ;)
Cor3 hai capito ciò che intendevo.. :)
ma il risultato è lo stesso..solo i valori dei maschi a carico senza il resto..
secondo me,il problema è nel where..perchè lì impongo che f.sesso='M' e
quindi continua a contare solo i maschi..che suggerisci??
Perchè non posti la strutture delle tabelle cosi è tutto più semplice? :D
khelidan1980
14-06-2011, 19:00
Cor3 hai capito ciò che intendevo.. :)
ma il risultato è lo stesso..solo i valori dei maschi a carico senza il resto..
secondo me,il problema è nel where..perchè lì impongo che f.sesso='M' e
quindi continua a contare solo i maschi..che suggerisci??
prova così:
select i.cf, i.cognome, count(f.sesso)
from impiegato i left join familiare_a_carico f on i.cf=f.cf_impiegato
AND f.sesso='M'
group by i.cf,i.cognome
GRAZIE khelidan1980..era molto più semplice di quanto io avessi pensato.. :)
khelidan1980
14-06-2011, 19:07
GRAZIE khelidan1980..era molto più semplice di quanto io avessi pensato.. :)
Ni..L'importante è che hai capito il perché, non è proprio immediato se non si mastica sql
no no..seriamente,ho capito..però ho anche un altro problema..
altra query..in realtà non riesco proprio a capire che condizione devo impostare..
"mostrare il cf, nome e cognome di tutti gli impiegati che non hanno alcuna collega donna che lavora nel loro stesso dipartimento"
ho iniziato a fare questa parte di query, ma la condizione delle colleghe donne,non ho proprio idea di come farla
select cf, nome,cognome
from impiegato i join dipartimento d on i.numero_dipartimento=d.numero_dipartimento
le 2 tabelle,sono collegate tra loro da quell'unica condizone presente nel join..
non voglio il codice..voglio capire..
khelidan1980
14-06-2011, 19:32
sei sulla strada giusta, così associ gli impiegati al proprio dipartimento, ora devi filtrare queste righe in base alla condizione che ti è stata data
Potresti sottrarre a quelli impiegati, gli impiegati che hanno colleghe donne. Ti aiuterebbe questo?
Potresti sottrarre a quelli impiegati, gli impiegati che hanno colleghe donne. Ti aiuterebbe questo?
il problema è che non ho proprio idea di come impostare la condizione colleghe femmine..la sottrazione so farla ma..è il resto che mi blocca..HELP ME..:help:
mi associo alla richiesta di capire meglio come sono strutturate le tabelle :)
bisogna sapere come è indicata la collega femmina :)
ci sarà un campo M/F o qualcosa del genere
ecco le 2 tabelle
CREATE TABLE IMPIEGATO(
CF CHAR(16) PRIMARY KEY,
NOME VARCHAR2(20) NOT NULL,
COGNOME VARCHAR2(20) NOT NULL,
SESSO VARCHAR2(1),
CF_SUPERVISORE CHAR(16),
NUMERO_DIPARTIMENTO NUMBER(2,0) NOT NULL,
CONSTRAINT CHECK_SESSO CHECK(SESSO IN ('M','F'))
)
CREATE TABLE SEDE_DIPARTIMENTO(
NUMERO_DIPARTIMENTO NUMBER(2,0),
CITTA_SEDE VARCHAR2(20),
CONSTRAINT PK_SEDE PRIMARY KEY (NUMERO_DIPARTIMENTO,CITTA_SEDE))
non mi pare serva nessuna join tra le 2
quello che farei è
tirare fuori i distinct numeri di dipartimento where sesso = 'F'
e poi tirare fuori gli altri dati dove il numero del dipartimento NOT IN la query precedente
khelidan1980
16-06-2011, 19:37
in effetti non serve nemmeno la join, hai tutto nella prima tabella ti basta fare una subquery nella where ragionaci
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.