gegevens uit meerdere tabellen halen

  • Onderwerp starter Onderwerp starter ivdh
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

ivdh

Gebruiker
Lid geworden
2 jun 2004
Berichten
54
Ik heb 3 tabellen waaruit ik gegevens wil "verzamelen". Ik ga proberen eea zo duidelijk mogelijk uit te leggen. Eventueel heb ik een db die ik kan mailen waarin je het geheel kan zien. Ik hoop dat er iemand iets meer van snapt dan ik.

tabel 1. TabelControlesubtaken
Met de (van belangzijnde) velden:
Id, TaakId, SubtaakId, Reistijd, Voorbereiding, Controle, Rapport, Totaal

tabel 2. TabelBedrijfControle
Met de velden:
Id, BedrijfId, TaakId, Datumplanning, DatumRealisatie

tabel 3. Kengetallen
Met de (van belangzijnde) velden:
Id, TaakId, TijdReistijd

Het veld TabelControlesubtaken.TaakId is via een LEFT JOIN gekoppeld aan het veld TabelBedrijfControle.TaakId.

Wat ik nu wil is per record uit de tabel TabelControleSubtaken weergeven hoeveel tijd er is geregistreerd (tot zover geen probleem) en wat de bijbehorende tijd uit de tabel Kengetallen is. Ik heb de onderstaande SQL opdracht gemaakt, maar krijg nu de melding

Deze subquery kan maximaal één record als resultaat hebben.

SELECT TabelControleSubtaken.Id, TabelControleSubtaken.DatumRealisatie, TabelControleSubtaken.Reistijd, TabelControleSubtaken.Voorbereiding, TabelControleSubtaken.Controle, TabelControleSubtaken.Rapport, TabelControleSubtaken.Totaal, [tabelControleSubtaken].[Reistijd]+[tabelControleSubtaken].[Voorbereiding]+[tabelControleSubtaken].[controle]+[tabelControleSubtaken].[Rapport]+[tabelControleSubtaken].[Totaal] AS Tijd, (SELECT tijdreistijd FROM Kengetallen WHERE Kengetallen.TaakId=[TabelbedrijfControle].[TaakId] AND Kengetallen.SubTaakId=[SubtaakId]) AS KengetalTijd
FROM TabelControleSubtaken LEFT JOIN TabelBedrijfControle ON TabelControleSubtaken.TaakId = TabelBedrijfControle.Id
ORDER BY TabelControleSubtaken.DatumRealisatie;
 
SELECT TabelControleSubtaken.Id, TabelControleSubtaken.DatumRealisatie, TabelControleSubtaken.Reistijd, TabelControleSubtaken.Voorbereiding, TabelControleSubtaken.Controle, TabelControleSubtaken.Rapport, TabelControleSubtaken.Totaal, [tabelControleSubtaken].[Reistijd]+[tabelControleSubtaken].[Voorbereiding]+[tabelControleSubtaken].[controle]+[tabelControleSubtaken].[Rapport]+[tabelControleSubtaken].[Totaal] AS Tijd, tijdreistijd AS
kengetaltijd
FROM (TabelControleSubtaken LEFT JOIN TabelBedrijfControle ON TabelControleSubtaken.TaakId = TabelBedrijfControle.Id ) LEFT JOIN kengetallen ON Kengetallen.TaakId=[TabelbedrijfControle].[taakId]
ORDER BY TabelControleSubtaken.DatumRealisatie;

Zoiets misschien? Klopt de structuur overigens wel helemaal?
 
Dat was hem, nu werkt het wel.
THANKS :thumb: !!!!!
 
Ik kom er toch nog even op terug. Ik heb nu deze SQL-opdracht:

SELECT TabelControleSubtaken.Id, KLMedewerker.Uren AS Beschikbaar, TabelControleSubtaken.DatumRealisatie, IIf([TabelControleSubtaken].[DatumRealisatie]<>"",[tabelControleSubtaken].[Reistijd]+[tabelControleSubtaken].[Voorbereiding]+[tabelControleSubtaken].[controle]+[tabelControleSubtaken].[Rapport]+[tabelControleSubtaken].[Totaal]) AS TijdWerkelijk, IIf([TabelControleSubtaken].[DatumRealisatie]="",[TijdReistijd]+[TijdVoorbereiding]+[TijdControle]+[TijdRapport]+[TijdTotaal]) AS TijdGepland, IIf([TabelControleSubtaken].[DatumRealisatie]<>"",[Uren]-([tabelControleSubtaken].[Reistijd]+[tabelControleSubtaken].[Voorbereiding]+[tabelControleSubtaken].[controle]+[tabelControleSubtaken].[Rapport]+[tabelControleSubtaken].[Totaal]),[Uren]-([TijdReistijd]+[TijdVoorbereiding]+[TijdControle]+[TijdRapport]+[TijdTotaal])) AS Restant
FROM ((TabelControleSubtaken LEFT JOIN TabelBedrijfControle ON TabelControleSubtaken.TaakId = TabelBedrijfControle.Id) LEFT JOIN KLSubtaakTaak ON TabelBedrijfControle.TaakId = KLSubtaakTaak.TaakId) LEFT JOIN KLMedewerker ON TabelControleSubtaken.MedewerkerId = KLMedewerker.Inlognaam
WHERE (((TabelControleSubtaken.MedewerkerId)="ihei") AND ((KLSubtaakTaak.SubTaakId)=[TabelControleSubtaken].[SubtaakId]) AND ((KLSubtaakTaak.TaakId)=[TabelBedrijfControle].[TaakId]));

En die geeft dit als resultaat:

Id Beschikbaar DatumRealisatie TijdWerkelijk TijdGepland Restant
649 1500 120 1380
631 1500 2004-05-12 15 1485
643 1500 2004-06-08 5 1495
638 1500 360 1140

Wat ik echter als resultaat wil hebben is 1 rij:

Beschikbaar TijdWerkelijk Tijdgepland Restant
1500 20 480 1000

Is dat op een of andere manier mogelijk met iets van group by ofzo?
 
Geplaatst door ivdh
En die geeft dit als resultaat:
Id Beschikbaar DatumRealisatie TijdWerkelijk TijdGepland Restant
649 1500 120 1380
631 1500 2004-05-12 15 1485
643 1500 2004-06-08 5 1495
638 1500 360 1140

Wat ik echter als resultaat wil hebben is 1 rij:

Beschikbaar TijdWerkelijk Tijdgepland Restant
1500 20 480 1000

Is dat op een of andere manier mogelijk met iets van group by ofzo?

Wat wil je dan op 1 rij hebben?? Want in het resultaat zie ik een Id staan en datumrealisatie die zie ik in hetgeen jij wil hebben niet.

Een group by kan wel alleen dan moet je dus voor alle andere velden dan degene waarop je groepeerd wel aangeven wat je er mee wilt doen (dus SOM(), AANTAL(), MAX(), MIN(), enz) anders krijg je een foutmelding.

De groeten,
Mark
 
Laatst bewerkt:
Ik wil alleen de totaaltellingen op 1 rij hebben. Maar ik heb het inmiddels op een andere manier opgelost. Bedankt in ieder geval!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan