Bedingte Auswahl von Zeilen basierend auf Spalte Wert
ID RANGE_ID START_DATE END_DATE BAND_TYPE FLAG_LINE
3 1 01/03/2013 31/03/2013 R 1
4 1 01/03/2013 31/03/2013 R 0
5 2 01/03/2013 31/03/2013 R 1
6 2 01/03/2013 31/03/2013 R 0
7 3 01/03/2013 31/03/2013 R 0
8 3 01/03/2013 31/03/2013 N 0
Aus dieser Tabelle für jede RANGE_ID, brauche ich, um wählen Sie die Zeilen mithilfe der folgenden Bedingungen:
Wenn es Zeilen mit identischen Spalten (abgesehen von dem ID-Feld), dann wählen Sie nur die Zeile, die hat FLAG_LINE = 1, wenn es identische Zeilen, aber keiner von Ihnen enthalten eine FLAG_LINE=1 Spalte wählen Sie dann alle von Ihnen auf dieser Grundlage die Abfrage zurückgeben soll die folgenden Ergebnisse:
ID RANGE_ID START_DATE END_DATE BAND_TYPE FLAG_LINE
3 1 01/03/2013 31/03/2013 R 1
5 2 01/03/2013 31/03/2013 R 1
7 3 01/03/2013 31/03/2013 R 0
8 3 01/03/2013 31/03/2013 N 0
Ich versuchte es in Stücke schneiden: ich.e führen Sie etwas ähnliches für jeden BEREICH:
begin
for x in ( select count(*) cnt
from dual
where exists (
select 1 FROM myTable
WHERE RANGE_ID = 1 AND FLAG_LINE = 1) )
loop
if ( x.cnt = 1 )
then
dbms_output.put_line('flag line exists');
--insert the line with FLAG_LINE = 1 into temp table for this range
else
dbms_output.put_line('does not exist');
--insert the lines into temp table for this range
end if;
end loop;
end;
Verwendung dieser Methode wird für jede PALETTE, die ich füllen eine temp-Tabelle und gibt die Ergebnisse zurück an das Ende, aber das ist nicht ganz flexibel ist, ist es auch eine andere Möglichkeit, dass dies erreicht werden kann?
Dank
InformationsquelleAutor 03Usr | 2013-06-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
versuchen so...
SQL FIDDLE-Demo
InformationsquelleAutor Amit Singh
Versuchen.
InformationsquelleAutor Noel
Hier ist ein weiterer Weg, um die Ergebnisse, die Sie wollen, sind
InformationsquelleAutor mtwaddell