Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[SQL] Ik zoek een JOIN maar heb geen scheidende waarden

Pagina: 1
Acties:

  • Knakker
  • Registratie: April 2000
  • Laatst online: 09:00
Ik kon echt geen betere omschrijving verzinnen... sorry daarvoor. Ik denk ook dat er geen oplossing is. Nogmaals sorry :P.

Mijn probleem kan ik het best aan de hand van twee tabelletjes weergeven:

Tabel "Verrichting":
code:
1
2
3
4
Id  TID  PID  Datum  Omschrijving   Bedrag
 1    1    1  01/01  Behandeling 1  100
 2    1    1  01/01  Behandeling 2  300
 3    2    1  01/01  Behandeling 3  250


Tabel "Agenda"
code:
1
2
3
Id  PID  Datum  Tijd
 1    1  01/01  50
 2    1  01/01  35


Ik heb twee tandartsen (TID) die allebei op één dag één patient (PID) geholpen hebben. Tandarts 1 heeft twee verrichtingen gedaan (behandeling 1 & 2) en Tandarts 2 één.

Hoe krijg ik er nu uit dat Tandarts 1 in totaal 50 minuten gewerkt heeft en Tandarts 2 35 minuten? Dat kan toch niet? Ik kan toch alleen joinen op basis van de PID en de Datum -die in tabel Agenda identiek zijn- of zie ik nu iets gruwelijk over het hoofd?

Hartelijk dank! _/-\o_

PS: Ik kan de tabelstructuur niet aanpassen en gegevens toevoegen; ik moet het met deze data doen.

[ Voor 10% gewijzigd door Knakker op 21-11-2007 18:38 ]

Geef mij maar een Warsteiner.


  • frickY
  • Registratie: Juli 2001
  • Laatst online: 27-11 09:24
Dat kan je inderdaad niet.
Het kan net zo goed zijn dat TID2 1 behandeling van 50 minuten heeft gedaan, en TID1 een behandeling van 15 en een tweede behandeling van 20 minuten. Met deze structuur kun je nonmogelijk zien welke tijd bij welke tandarts hoort.

[ Voor 19% gewijzigd door frickY op 21-11-2007 18:40 ]


  • ocdaan
  • Registratie: Augustus 2001
  • Laatst online: 24-11 19:09

ocdaan

Niet zo zeuren jongens!

hebben beide tantartsen aan dezelfde patient gewerkt?

dan koppeltabel houden en agenda.id toevoegen aan Verrichting

in het geval dat 1 tantarts altijd aan 1 patent werkt zou ik de tabellen samenvoegen

;-) succes!!


hahaha hoor mij, als je niets kan aanpassen, ooooops me bad ;-)

maargoed dit klopt van geen kant natuurlijk!

[ Voor 20% gewijzigd door ocdaan op 21-11-2007 18:54 ]


  • EfBe
  • Registratie: Januari 2000
  • Niet online
Auw mijn ogen....

De wizard die deze tables heeft opgezet, die is hopelijk met een enkele reis postkamer gestuurd?

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • Knakker
  • Registratie: April 2000
  • Laatst online: 09:00
Mja :P

Ik was er alláng achter dat het bedrijf dat onze tandartssoftware geschreven heeft (de grootste in Nederland!!) niet echt kaas gegeten heeft software- en database architecture, maar goed - ik moet het ermee doen. Ik ben alleen maar met een reportagetool bezig, en om nou zelf een heel nieuw programma te schrijven, tja... heb ik ook geen zin in. Afgezien van het feit dat ik die verantwoordelijkheid niet wil dragen.

Er is echter een beetje hoop. In 95% van de gevallen zal het hoogste bedragtotaal (van de verrichtingen) ook de meeste tijd in beslag genomen hebben, dus in geval van een "tie" kan ik een keuze maken die in 19 van de 20 gevallen de juiste is. Kan ik dit eenvoudig in één SQL statement voor elkaar krijgen?

Even ter achtergrond: ik heb de gegevens toch alleen maar nodig voor statistische reportage doeleinden (gemiddeld aantal uren gewerkt per dag per week), dus kleine discrepanties (zó vaak zal het niet voorkomen) zijn niet zo héél belangrijk - het draait uiteindelijk toch alleen maar om de trend.

In ieder geval bedankt voor de hulp... ik begon al bijna aan mezelf te twijfelen :P

[ Voor 12% gewijzigd door Knakker op 21-11-2007 20:37 ]

Geef mij maar een Warsteiner.


  • Knakker
  • Registratie: April 2000
  • Laatst online: 09:00
Weet iemand of ik middels een SQL query één item kan selecteren op basis van zijn rangorde in een gesorteerde rij?

code:
1
2
3
4
5
6
7
SELECT A.PID, A.Datum, A.Tijd, 
    (SELECT [-kies hier de juiste TID op basis van de orde van SUM(V.Bedrag)-] 
        FROM Verrichting AS V 
        WHERE V.PID = A.PID AND V.Datum = A.Datum
        GROUP BY V.TID
        ORDER BY SUM(V.Bedrag) DESC) AS TandartsID
FROM Agenda AS A


Is dit mogelijk?

Geef mij maar een Warsteiner.


  • ATS
  • Registratie: September 2001
  • Laatst online: 28-11 20:56

ATS

Ik denk zelf niet dat je dit allemaal voor elkaar gaat krijgen met SQL direct op je tabel. Ik zou zelf denk ik de data importeren in nieuwe tabellen en met wat heuristiek (zoals dat de prijs relateert met de tijd) proberen om de ontbrekende links te construeren. Vervolgens doe je dáár je queries op.

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
Rangorde kun je op zich wel bereiken, maar het is niet een query waar je systeem vrolijk van wordt bij veel data... en of het eenvoudig is op jouw manier is maar de vraag... iig kun je dat bereiken met een join van zichzelf en dan een count op alle records die kleiner zijn...

SQL:
1
2
3
4
5
6
7
8
9
10
SELECT
A.veld1, A.veld2, count(B.IDveld),....
FROM
mytable A
LEFT JOIN
mytable B
ON
B.bedrag < A.bedrag
ORDER BY
count(B.IDveld)


bij gelijke bedragen gaat dit denk ik ook al voor problemen zorgen... maar misschien kun je er wat mee?
Pagina: 1