QERY CON UNION O CON QUALE JOIN?

mercoledì 16 luglio 2008 - 15.14

stuzzo Profilo | Junior Member

Salve a tutti,
vorrei chiedervi una mano....vi spiego cosa dovrei realizzare:

Devo riempire un report che ha una colonna Descrizione. Questa colonna viene riempita dal valore presente in due campi sul db, i quali o uno o l'altro sono nulli.
Esempio:
azione1->null azione2->mangiare descrizione->mangiare
azione1->bere azione2->null descrizione->bere
Come faccio a realizzare una query del genere, considerando che sono sulla stessa tabella?

Vi ringrazio e spero di essermi fatto capire..... :)
Ciao

lbenaglia Profilo | Guru

>Devo riempire un report che ha una colonna Descrizione. Questa
>colonna viene riempita dal valore presente in due campi sul db,
>i quali o uno o l'altro sono nulli.

Ciao Alfredo,

con quale DBMS stai lavorando?
In SQL Server puoi ricorrere alla funzione COALESCE che restituisce il primo valore non nullo tra i suoi argomenti:

SELECT COALESCE(azione1, azione2) AS Descrizione FROM...

>Vi ringrazio e spero di essermi fatto capire..... :)
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

stuzzo Profilo | Junior Member

Ciao Lorenzo,
si, utilizzo SQLSERVER. Inoltre la funzione che mi hai dato è molto utile. Ci siamo quasi :)
Ti spiego...
Il problema adesso è che le 2 funzioni sono su 2 tabelle diverse...
Esempio
Riga1 -> Utente=1 azione1=1 azione2=null
Riga2 -> Utente=1 azione1=null azione2=2
TabellaAzione1 -> IDAzione=1 Azione=mangiare
TabellaAzione2 -> IDAzione=2 Azione=bere

Il risultato della mia query deve essere:
Utente=1 descrizione=mangiare
Utente=1 descrizione=bere

Cioè adesso trovato il campo che non è null devo risalire all'azione corrispondente, ovviamente essa deve andare a finire all'interno di una colonna "Descrizione"

Grazie!!!

lbenaglia Profilo | Guru


>Ti spiego...
>Il problema adesso è che le 2 funzioni sono su 2 tabelle diverse...
>Esempio
>Riga1 -> Utente=1 azione1=1 azione2=null
>Riga2 -> Utente=1 azione1=null azione2=2
>TabellaAzione1 -> IDAzione=1 Azione=mangiare
>TabellaAzione2 -> IDAzione=2 Azione=bere
>
>Il risultato della mia query deve essere:
>Utente=1 descrizione=mangiare
>Utente=1 descrizione=bere

Eh, ma scritto così non si capisce niente
Non puoi postare un esempio completo con le strutture delle tabelle (CREATE TABLE), alcune righe di prova (INSERT INTO) ed il result set finale che vuoi ottenere?

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

stuzzo Profilo | Junior Member

Grazie Lorenzo, Sono d'accordo con te che sia difficile fartelo capire....
IDPagamento int 4 0
IDAnnuncio int 4 1 ->può essere nullo
IDTipoPagamento int 4 0
Prezzo money 8 0
IDInserzionista int 4 1
DataPagamento smalldatetime 4 0
IDEdizione int 4 1 ->può essere nullo

un esempio di insert è
INSERT INTO Pagamento (IDAnnuncio, IDTipoPagamento, Prezzo, IDInserzionista, DataPagamento, IDEdizione) VALUES (1111, 1, 100, 58, 14/07/2007, null)
INSERT INTO Pagamento (IDAnnuncio, IDTipoPagamento, Prezzo, IDInserzionista, DataPagamento, IDEdizione) VALUES (null, 1, 100, 58, 14/07/2007, 35)

Edizione
IDEdizione int 4
NomeEdizione nvarchar

Annunci
IDAnnuncio int 4
NomeAnnuncio nvarchar

TipoPagamento
IDTipo.....
NomeTipo.....

La mia query deve restituirmi una cosa del genere:
Prezzo Data Tipo Descrizione
100 14/07/2007 NomeTipo NomeAnnuncio
100 14/07/2007 NomeTipo NomeEdizione

Spero che adesso ti abbia fatto capire un po' meglio
ciao e grazie mille

lbenaglia Profilo | Guru

>Spero che adesso ti abbia fatto capire un po' meglio
Mi spiace ma non ci siamo.
Servono i comandi DDL di CREATE TABLE con TUTTI I CONSTRAINTS (PK, FK, ecc) ed i comandi di INSERT di TUTTE LE TABELLE inerenti alla query che vuoi fare.

>ciao e grazie mille
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Dainesi Profilo | Senior Member

Dunque ... ti costruisci una bella query con dei LEFT JOIN e leghi i risultati delle colonne con la formula COALESCE o l'analoga (che io preferisco ...) ISNULL(<espressione>,<valore alternativo>)

stuzzo Profilo | Junior Member

Ciao, sono riuscito a fare la query più o meno come mi hai detto tu. Perfetto Grazie!!

Dainesi Profilo | Senior Member

Di niente. Servono a questo i forum!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5