[SQL] subquery krijgt niet de juiste waarde

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Goof2000
  • Registratie: Februari 2003
  • Laatst online: 19:06
Mijn vraag
Ik ben bezig met een controle te bouwen waarbij na heel veel proberen nog niet de juiste output komt.

Ik heb 3 tabellen:

Soorten
NoSoortRoute
1AardbeiWinkel
2BanaanKliko
3KiwiWinkel


Koppeling
Fruit noMeting
123
125
127
129
131
133
241
243
245
351
353
355


Metingen
MetingStatus
23Rijp
25Rijp
27Schimmel
29Rijp
31Groen
33Rijp
41Groen
43Rijp
45Rijp
51Groen
53Groen
55Groen


Nu wil ik natuurlijk dat de aardbeien niet naar de winkel gaan omdat er een meting is met schimmel.
En de bananen niet in de kliko gaan, omdat er geen schimmel is.

code:
1
2
3
4
5
6
7
8
9
10
11
12
Select
F1.Fruit as Fruit
F1.Route as Route
F3.Status as Status

From Soorten as F1

From Koppeling as F2
on F1.No = F2.Fruit no

From Metingen as F3
on F2.Fruit no = F3.Meting


Nu wil ik eigenlijk als output:
Aardbei - Winkel - Rijp - schimmel
Aardbei - Winkel - Rijp - schimmel
Aardbei - Winkel - Schimmel - schimmel
Aardbei - Winkel - Rijp - schimmel
Aardbei - Winkel - Groen - schimmel
Banaan - Kliko - Groen - geen schimmel
Banaan - Kliko - Rijp - geen schimmel
Banaan - Kliko - Rijp - geen schimmel
Kiwi - Winkel - Groen - geen schimmel
Kiwi - Winkel - Groen - geen schimmel
Kiwi - Winkel - Groen - geen schimmel

Dus als in 1 van de mettingen schimmel komt te staan, dan een kolom toevoegen met schimmel, anders geen schimmel.
Schimmel of geen schimmel moet dus aan het product gekoppeld worden.

Relevante software en hardware die ik gebruik
Microsoft SQL Server Management Studio

Wat ik al gevonden of geprobeerd heb
Het op te losssen met een subquery en met een case statement in de Select en From.

Ik mis een handvat om verder te gaan, misschien iemand die een duw in de juiste richting kan geven?

Beste antwoord (via Goof2000 op 26-04-2017 12:24)


  • GlowMouse
  • Registratie: November 2002
  • Niet online
Je zult een subquery nodig hebben met COUNT(*).

[ Voor 73% gewijzigd door GlowMouse op 26-04-2017 11:31 ]

Alle reacties


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Je zult een subquery nodig hebben met COUNT(*).

[ Voor 73% gewijzigd door GlowMouse op 26-04-2017 11:31 ]


Acties:
  • 0 Henk 'm!

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 04:27
1. Volgens mij klopt je datamodel niet. Je wil toch afhankelijk van je meting bepalen of iets naar de kliko of naar de winkel gaat? Rijp -> winkel, schimmel -> kliko. Dat lijkt me dus niet in de "soort" table te horen.
2. Er van uitgaande dat de laatste meting van belang is, zal je iets van een volgnummer of timestamp in je koppeling table op moeten nemen om de laatste meting te kunnen bepalen. Dan zou je met een ROW_NUMBER of GROUP BY een eind moeten komen.

Roomba E5 te koop


Acties:
  • 0 Henk 'm!

  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 01:04

The Eagle

I wear my sunglasses at night

Een kolom bestaat in je resultset, of niet. Maar niet conditioneel :)
Aangenomen dat hier een front end voor komt te staan zijn dit typisch dingen (kolommen verbergen obv resultset) die je aan de frondend over laat. Die is daar veel beter in :)

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


Acties:
  • 0 Henk 'm!

  • Goof2000
  • Registratie: Februari 2003
  • Laatst online: 19:06
Aanvulling: Ik heb alles versimpel ten opzichte van de query die ik heb.

De metingen zijn op verschillende plekken, tijd is daarom niet van toepassing.

De tabel soort is misschien slecht gekozen, dat is de huidige route en ik wil die gaan controleren aan de hand van de metingen of die route wel juist gekozen is mbv de metingen te koppelen aan deze route.

De oplossing van GlowMouse vind ik erg interressant, daarmee ga ik aan de slag, dat had ik nog niet bedacht.