SQL - decode Problem

  • Themenstarter Themenstarter FanClub
  • Beginndatum Beginndatum
F

FanClub

Hallo,

ich habe ein Problem mit einem SQL-Statement.

Zunächst gehen wir davon aus, ich habe zwei Tabellen, in einer davon sind Veranstaltungen und in der anderen Tabelle sind die Kosten dieser Veranstaltungen.
Eine Veranstaltung kann mehrere Kostensätze haben. Diese Kostensätze können den Status "Geprüft" "J" oder "N" annehmen.

Nun möchte ich gerne die Veranstaltungen ausgeben. Wichtig dabei ist, sobald eine Veranstaltung einen Kostensatz auf Geprüft "N" hat, soll diese Veranstaltung auch mit Geprüft = "N" ausgegeben werden.
Eine Veranstaltung darf nur den Status Geprüft "J" tragen, wenn alle Kostensätze geprüft sind und daran scheitert es, da ich auch Datensätze ausgegeben bekomme wo der Status Geprüft einiger Kostensätze auf "N" steht und andere Kostensätze der Veranstaltung auf "J".

Mein bisheriger Versuch war der:
Code:
SELECT count(decode(sum(decode (ko_geprueft,'J',0,'N',1)), 0, 'J', 'N')) FROM vg,ko  WHERE vg.vg_id=ko.ko_vg_id AND ko.ko_geprueft LIKE 'J';

Das eigentliche SQL-Statement ist noch um einiges Komplexer aber die Kurzform sollte zunächst genügen.

mfg FanClub
 
Hallo

ich würde das Problem so lösen:
Code:
SELECT  vg.vg_id,
	CASE 	WHEN 	ko_vg_id1.ko_vg_id.IS NULL 
			AND NOT ko_vg_id2.ko_vg_id IS NULL THEN 'GEPRÜFT'
		WHEN 	NOT ko_vg_id1.ko_vg_id.IS NULL THEN 'UNGEPRÜFT'
		ELSE 	'UNKLAR'
	END AS  ZUSTAND
FROM 	vg, (SELECT DISTINCT ko_vg_id FROM ko WHERE  ko_geprueft='N')  ko_vg_id1,
 	(SELECT DISTINCT ko_vg_id FROM ko WHERE  ko_geprueft='J')  ko_vg_id2
WHERE 	vg.vg_id=ko.ko_vg_id1(+)
	AND vg.vg_id=ko.ko_vg_id2(+)

gruß
 
Zurück