Ik heb de volgende query
In TABLE staan een x aantal records. Voor elke waarde van VAL1 kunnen er meerdere records zijn. Het gaat erom om te kijken of al deze records voldoen aan een bepaalde voorwaarde (FLAG='Y'). Alleen als dat het geval is dan mag VAL1 worden teruggegeven. Wat ik nu doe is kijken of er voor elke waarde van VAL1 de unieke FLAG waarden tellen. Als deze optelling nl. niet gelijk aan 1 is dan hebben niet alle records dezelfde FLAG waarde.
Op zich werkt dit goed maar er is 1 probleem. Als voor alle onderliggende records van VAL1 de FLAG waarde 'N' is dan is de opgetelde waarde ook gelijk aan 1 (er is immers maar 1 verschillende FLAG waarde). Dus wordt de VAL1 waarde opgenomen in de recordset. Dit wil ik dus zien te voorkomen. Maar wel op een zo efficiente manier. TABLE is nl. een behoorlijk grote tabel en hoe minder is daar doorheen moet hoe beter het is.
Wat ik zelf probeer te bereiken is dat dat als de optelwaarde van de verschillende FLAG waarden gelijk is aan 1 dat in dat geval deze unieke FLAG waarde ook wordt teruggegeven. Ik weet alleen niet hoe ik dit moet doen zonder weer door heel de tabel heen te moeten. Is zoiets mogelijk? Zo ja, hoe dan? Zo niet, is er een alternatief?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| SELECT DISTINCT VAL1
FROM(
SELECT DISTINCT VAL1, L.FLAG
FROM TABLE, LOOKUP L
WHERE VAL2 = 'Value'
AND VAL3 IN ('X', 'Y', 'Z')
AND trim(VAL4) = trim(L.KEY1)
AND L.KEY2 = 'A'
AND L.KEY3 = 'B'
GROUP BY VAL1, L.FLAG
)
GROUP BY VAL1
HAVING COUNT(FLAG)=1 |
In TABLE staan een x aantal records. Voor elke waarde van VAL1 kunnen er meerdere records zijn. Het gaat erom om te kijken of al deze records voldoen aan een bepaalde voorwaarde (FLAG='Y'). Alleen als dat het geval is dan mag VAL1 worden teruggegeven. Wat ik nu doe is kijken of er voor elke waarde van VAL1 de unieke FLAG waarden tellen. Als deze optelling nl. niet gelijk aan 1 is dan hebben niet alle records dezelfde FLAG waarde.
Op zich werkt dit goed maar er is 1 probleem. Als voor alle onderliggende records van VAL1 de FLAG waarde 'N' is dan is de opgetelde waarde ook gelijk aan 1 (er is immers maar 1 verschillende FLAG waarde). Dus wordt de VAL1 waarde opgenomen in de recordset. Dit wil ik dus zien te voorkomen. Maar wel op een zo efficiente manier. TABLE is nl. een behoorlijk grote tabel en hoe minder is daar doorheen moet hoe beter het is.
Wat ik zelf probeer te bereiken is dat dat als de optelwaarde van de verschillende FLAG waarden gelijk is aan 1 dat in dat geval deze unieke FLAG waarde ook wordt teruggegeven. Ik weet alleen niet hoe ik dit moet doen zonder weer door heel de tabel heen te moeten. Is zoiets mogelijk? Zo ja, hoe dan? Zo niet, is er een alternatief?
[ Voor 8% gewijzigd door Deddiekoel op 01-10-2004 17:45 ]
Verlanglijstje: Switch 2, PS5 Pro Most wanted: Switch 2