Newsgroup: it.comp.software.database
Titolo: Select Condizionata

Ho la necessità di effettuare una select condizionata: mi spiego
meglio
devo valutare se due campi di tipo date (DATA_A, DATA_B) soddisfano la
condizione in un range di data
DATA é COMPRESA TRA DATA1 E DATA2
questa campo DATA, da considerare non é sempre lo stesso ma é da
considerarsi tra la maggiore di DATA_A e DATA_B
non essendo avvezzo a lavorare con STORED PROCEDURES mi viene da
pensare che la soluzione possa essere anche banale utilizzando
quest'ultime, oppure impostando un costrutto condizionale PL\SQL.
Qualcuno mi sa dara un idea...
Grazie

 considerarsi tra la maggiore di DATA_A e DATA_B
Questo non l'ho capito
Saluti
Andrea 

Grazie Andrea
Il vero dilemma personale, effettivamente, non é tanto nell'impostare
il costrutto Between quanto implementare una discrezionalità nello
scegliere quale
campo data ricade o meno nell'intervallo data1-data2.
Il campo da considerare nella select é la data maggiore tra le due...
Mi spiego meglio con un esempio:
supponendo di considerare un record con due date Data_A(19/02/2005) e
Data_B(23/02/2004); imposto gli intervalli da data1-data2.
Essendo data_B successiva (maggiore) di Data_A, sara il campo Data_B
che dovrò utilizzare per la Between con gli estremi data1-data2
Per un altro record, dove
Data_A(21/02/2005) e Data_B (20/02/2005), é il caso opposto al
precedente, devo considerare la data successivA ovvero Data_A.
Come traduto il tutto... in Sql oppure tramite SP?
Ciao
Simone

 ha scritto nel messaggio 
news:b08ecd24.05022...@posting.google.com...


Direi che sei stato utile...
Tuttavia mi manca ancora un ultimo problema da risolvere (per essere perfetto)
Applicando la tua indicazione ho prodotto il seguente Script SQL
Ex.
SELECT CASE 
	WHEN contratti.dtevasioneA > contratti.dtevasionet THEN       contratti.dtevasioneA
	WHEN contratti.dtevasioneA < contratti.dtevasionet THEN contratti.dtevasionet
END AS DT, CONTRATTI.CODICE AS COD, [seguono altri campi...] 
FROM CONTRATTI LEFT OUTER JOIN PRATICHE ON CONTRATTI.CODICE = PRATICHE.Codice  
WHERE ((DT >= '1/01/2005') and (DT <= '1/31/2005'))
Server: Msg 207, Level 16, State 3, Line 1
Invalid column name 'DT'.
Server: Msg 207, Level 16, State 1, Line 1
Invalid column name 'DT'.
come posso usare l'alias DT impostato?
non posso utilizzare ...END AS DT  e poi il corrispondente nome nella Where?
Grazie mille per le precedenti dritte.
Simone

No mi spiace. Non puoi utilizzare un alias nella Where
Sei costretto a fare così:
SELECT CASE
 WHEN contratti.dtevasioneA > contratti.dtevasionet THEN 
contratti.dtevasioneA
 WHEN contratti.dtevasioneA < contratti.dtevasionet THEN 
contratti.dtevasionet
 END AS DT, CONTRATTI.CODICE AS COD, [seguono altri campi...]
FROM CONTRATTI LEFT OUTER JOIN PRATICHE ON CONTRATTI.CODICE = 
PRATICHE.Codice
 WHERE
        ((contratti.dtevasioneA BETWEEN '1/01/2005' and  '1/31/2005') AND 
contratti.dtevasioneA > contratti.dtevasionet )
    OR
        ((contratti.dtevasionet BETWEEN '1/01/2005' and  '1/31/2005') AND 
contratti.dtevasioneA < contratti.dtevasionet )
Saluti
Andrea 

Sei stato perfetto: il tutto funziona come doveva.
...peccato non avere l'alias da mettere in where... sarebbe stato + elegante
e meno prolisso.
Grazie
Saluti
Simone

 ha scritto nel messaggio 
news:b08ecd24.0502...@posting.google.com...
