PDA

View Full Version : Problema con una query


scoppato
04-05-2002, 16:05
Questo che segue è il codice SQL di una query a campi incrociati fatta in access:

TRANSFORM Count(Appuntamenti.EsitoTelf) AS ConteggioDiEsitoTelf
SELECT Elenco_Utenti.Cognome
FROM Elenco_Utenti INNER JOIN Appuntamenti ON Elenco_Utenti.NomeUtente = Appuntamenti.NomeUtente
GROUP BY Elenco_Utenti.Cognome
PIVOT Appuntamenti.EsitoTelf;

Questa query mi conta quante volte appare in un campo una determinata stringa, puo' accadere che tale stringa non ci sia e quindi il risultato della query mi da un campo vuoto.
come faccio a far comparire uno 0 nel caso il conteggiuo risulti nullo?

vi ringrazio anticipatamente

lo scoppato:)

cionci
04-05-2002, 19:04
(SELECT Elenco_Utenti.Cognome, 0 As ConteggioDiEsitoTelf
FROM Elenco_Utenti
WHERE Elenco_Utenti.Cognome NOT IN (SELECT Elenco_Utenti.Cognome
FROM Elenco_Utenti INNER JOIN Appuntamenti ON Elenco_Utenti.NomeUtente = Appuntamenti.NomeUtente
GROUP BY Elenco_Utenti.Cognome
HAVING Count(Appuntamenti.EsitoTelf) > 0)
UNION
(TRANSFORM Count(Appuntamenti.EsitoTelf) AS ConteggioDiEsitoTelf
SELECT Elenco_Utenti.Cognome
FROM Elenco_Utenti INNER JOIN Appuntamenti ON Elenco_Utenti.NomeUtente = Appuntamenti.NomeUtente
GROUP BY Elenco_Utenti.Cognome
PIVOT Appuntamenti.EsitoTelf);

Prova così :)

scoppato
05-05-2002, 00:30
ciao cionci!

ho provato a usare il tuo codice in access, ma non funziona!
access mi da' il seguente errore:

Impossibile usare il campo incrociato di una colonna non fissa come sotto query.

dove sbaglio?

...sei sempre disponibile!!!!! grazie!:):):)

cionci
05-05-2002, 11:37
Ah caspita aspetta...lo statement trasform non l'avevo mai usato...

Faccio qualche prova e ti faccio sapere...

Ah...non è che mi passeresti il db...almeno non ho bisogno di rifarmelo ?

cionci
05-05-2002, 12:47
Il massimo che ho potuto fare è questo...

Ti devi fare due query separate perchè non sono riuscito a mettere le query insieme (dava errori strani)...

Query1 :

TRANSFORM Count([EsitoTelf]) AS ConteggioDiEsitoTelf
SELECT [Elenco_Utenti].[Cognome]
FROM Query2
GROUP BY [Elenco_Utenti].[Cognome]
PIVOT [Appuntamenti].[EsitoTelf];

Query2 :

(SELECT [Elenco_Utenti].[Cognome], [Appuntamenti].[EsitoTelf]
FROM Elenco_Utenti INNER JOIN Appuntamenti ON [Elenco_Utenti].[NomeUtente]=[Appuntamenti].[NomeUtente])
UNION ALL
(SELECT [Elenco_Utenti].[Cognome], "NoAppuntamenti" As EsitoTelf
FROM Elenco_Utenti
WHERE [Elenco_Utenti].[Cognome] NOT IN
(SELECT [Elenco_Utenti].[Cognome]
FROM Elenco_Utenti INNER JOIN Appuntamenti ON [Elenco_Utenti].[NomeUtente]=[Appuntamenti].[NomeUtente]));

In pratica mette un nuovo campo chiamato NoAppuntamenti e ci mette il valore 1 se la persona non è ha mai avuto un appuntamento...