[SQL] WHERE-clausule op samengestelde kolom

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • RemcoZ
  • Registratie: Augustus 2000
  • Laatst online: 23-01 10:23
In een SQL query vul ik een veld vanuit een alternatieve bron als de oorspronkelijk bron leeg is en alle waarden stop ik in één kolom. Nu wil ik op deze kolom een WHERE clausule los laten:

BRON
SerienrPlaats
111Amsterdam
222
333
444


EXTRA
SerienrPlaats
333Amsterdam
444Rotterdam


Hier laat ik het volgende SQL-statement op los.

code:
1
2
3
4
5
6
7
SELECT
Bron.Serienr,
CASE (Bron.Plaats) WHEN '' THEN Extra.Plaats ELSE Bron.Plaats END AS [Samengestelde_Plaats]

FROM Bron

LEFT JOIN Extra ON Extra.Serienr = Bron.Serienr


Okay, misschien niet foutloos, maar de strekking is duidelijk. In de 'echte' omgeving is dat al werkend. Deze geeft het volgende resultaat:
Query output
SerienrSamengestelde_Plaats
111Amsterdam
222
333Amsterdam
444Rotterdam


Nu het (voor mij) tricky gedeelte: Hoe zorg ik ervoor de Amsterdam eruit wordt gefilterd zonder de rest (bijv. lege velden) te verliezen?

- Ik kan er geen INNER JOIN van maken, want dan verlies ik info.
- Een WHERE clausule op de extra tabel is geen optie; dan kun je er net zo goed een INNER JOIN van maken.
- Een extra clausule in de LEFT JOIN (AND NOT LIKE 'Amst%') is geen optie; ik krijg alleen maar extra lege records terug op die plekken.

Is het mogelijk 'Samengestelde_Plaats' in de WHERE clausule op te nemen? Dit is mij nl. niet gelukt. Of zijn er andere manieren om hier mee om te gaan?

Acties:
  • 0 Henk 'm!

  • Spiked
  • Registratie: Mei 2008
  • Laatst online: 17-09 15:30
Probeer eens een getal ipv je kolomnaam, where 2 = 'amsterdam'

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Je kunt natuurlijk ook gewoon je CASE expressie herhalen in de WHERE. Of dat iets herschrijven: WHERE NOT COALESCE(Bron.Plaats = 'Amsterdam' OR (Bron.Plaats = '' AND Extra.Plaats, = 'Amsterdam'), FALSE)

[ Voor 54% gewijzigd door .oisyn op 13-10-2009 16:26 . Reden: NULL is ook belangrijk ja :) ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • freak-ish
  • Registratie: December 2008
  • Laatst online: 15-01 17:16
Volgens mij kan WHERE wel

WHERE samengestelde_plaats = 'Amsterdam' OR samengestelde_plaats IS NULL

voor verbetering vatbaar maar het gaat om het 2e gedeelte (IS NULL)

Acties:
  • 0 Henk 'm!

  • Salandur
  • Registratie: Mei 2003
  • Laatst online: 13:49

Salandur

Software Engineer

door het voorgaande statement te wrappen in een nieuwe statement:
SQL:
1
2
3
select * from
( <oude select> )
where Samengestelde_Plaats = 'Amsterdam' or Samengestelde_Plaats is null

[ Voor 13% gewijzigd door Salandur op 13-10-2009 16:19 . Reden: verkeerd gelezen ]

Assumptions are the mother of all fuck ups | iRacing Profiel