Qery Select condizionale

lunedì 14 dicembre 2009 - 15.29

LucaLuke Profilo | Newbie

Ciao a tutti ho un problema che non riesco a risolvere.

Ho una tabella format da 4 colonne

ID | Oggetto | Importo_Base | Importo_Auth

1 Penna 100 90
2 Gomma 90 Null
3 Lapis 30 40
4 Carta 120 0

La logica del risultato della query è questo:
Praticamente la query mi deve restituire 2 valori:
Oggetto e Importo.

L'oggetto è la colonna oggetto ed ok,
L'importo è condizionale ossia:
Deve corrispondere Importo_Auth se esso è > di 0
Altrimenti mi deve riportare l'importo della colonna Importo_Base

Nel nostro esempio:

Penna 90
Gomma 90
Lapis 40
Carta 120

Come si può fare?



lbenaglia Profilo | Guru

>Come si può fare?

Ciao Luca,

Che DBMS utilizzi?

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

LucaLuke Profilo | Newbie

Utilizzo SQL Server della Microsoft

lbenaglia Profilo | Guru

>Utilizzo SQL Server della Microsoft

Bene, allora osserva il seguente esempio:

USE tempdb; CREATE TABLE dbo.foo( ID int NOT NULL PRIMARY KEY, Oggetto varchar(10) NOT NULL, Importo_Base int NOT NULL, Importo_Auth int NULL ); INSERT dbo.foo VALUES (1, 'Penna', 100, 90) , (2, 'Gomma', 90, NULL) , (3, 'Lapis', 30, 40) , (4, 'Carta', 120, 0); SELECT Oggetto , CASE COALESCE(Importo_Auth, 0) WHEN 0 THEN Importo_Base ELSE Importo_Auth END AS Importo FROM dbo.foo; /* Output: Oggetto Importo ---------- ----------- Penna 90 Gomma 90 Lapis 40 Carta 120 (4 row(s) affected) */ DROP TABLE dbo.foo;

Come puoi vedere il problema si risolve con una banale CASE: quando Importo_Auth è uguale a zero considera Importo_Base, altrimenti Importo_Auth.
Dato che Importo_Auth può assumere il (non) valore NULL, la funzione COALESCE fa in modo di restituire zero quando la colonna non è valorizzata, riducendo in sostanza le 2 condizioni ad una sola: il test del valore 0

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5