Toon posts:

[SQL] subquery werkt niet goed

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb de volgende sql query

code:
1
SQL = "select distinct tblTest_Details.Name, (select Count(tblMed_Test.Status) from tblTest_Details) as totaant from tblMed_Test where tblMed_Test.Name <> '' group by tblMed_Test.Name"


Omdat ik deze query later uit moet breiden heb ik een subquery nodig.
De bedoeling is dat achter iedere Name een aantal komt van de gevulde status velden voor die Name. Dus bijvoorbeeld:

Jan 12
Piet 8
Frits 6

Ik krijg nu:

Jan 26
Piet 26
Frits 26

Heb al vanalles geprobeerd om deze query te wijzigen maar het lukt me niet, heeft iemand een idee?

Verwijderd

Hier heb je toch geen subselect voor nodig?

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Je moet een zgn correlated subquery maken, je moet dus in je subquery een WHERE clausule opnemen die naar de hoofdquery wijst.

SQL:
1
2
3
4
SELECT TD.Name,
    (SELECT COUNT(*) FROM tblMed_Test.Status WHERE Name = TD.Name) as tot
FROM tblTest_Details TD
GROUP BY TD.Name


Je ziet dat ik in m'n WHERE clausule NAME = TD.Name opneem, dit verwijst naar de NAME van tblTest_Details. Zo krijg de je goede aantallen bij de goede records uit de hoofdquery.

Je kunt natuurlijk nog meer voorwaarden aan je WHERE toevoegen, net als je anders zou doen.

Weet je trouwens zeker dat je een subselect nodig bent?

[ Voor 10% gewijzigd door P_de_B op 28-12-2005 08:24 ]

Oops! Google Chrome could not find www.rijks%20museum.nl


  • _Sunnyboy_
  • Registratie: Januari 2003
  • Laatst online: 14-01 22:23

_Sunnyboy_

Mooooooooooooooooo!

Zo kan het ja, al moet het ook prima kunnen zonder subquery, gewoon met een join & group by.

Ik hoop trouwens wel dat name niet de key is waarop je Test & Test_Details aan elkaar knoopt.

Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life


Verwijderd

Topicstarter
Heb het hier inderdaad nog niet echt nodig maar ik krijg zo nog meer counts waarbij het veld status een bepaalde waarde moet hebben. Leek me zo het beste, toch?

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
_Sunnyboy_ schreef op woensdag 28 december 2005 @ 08:26:
Ik hoop trouwens wel dat name niet de key is waarop je Test & Test_Details aan elkaar knoopt.
Bij verschillende RDMBSsen is dit inderdaad een keyword en zul je ws. een foutmelding krijgen als je deze naam gebruikt. Je kunt dit oplossen door er backticks of blokhaken omheen te zetten (ook weer afhankelijk van welke db je gebruikt) maar beter is geen keywords in het geheel te gebruiken.

Als je meerdere kolommen 'counts' krijgt met verschillende statuswaarden kun je eens kijken naar deze methode: http://www.stephenforte.n...18-4ac0-a405-15d6d813eeb8

[ Voor 18% gewijzigd door P_de_B op 28-12-2005 08:38 ]

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

Topicstarter
Krijg nu ineens dit:

Microsoft JET Database Engine error '80004005'

Could not find file 'C:\WINNT\system32\tblTest_Details.mdb'.

/Test/test_rapportage2.asp, line 94

Begrijp het even niet.............

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
:? Laat je hele code eens zien.

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

Topicstarter
code:
1
SQL = "select distinct tblTest_Details.Name, (select Count(*) from tblTest_Details.Status where Name = TD.Name) as totaant from tbTest_Details TD"


Het moet in deze regel zitten want als ik gewoon een select * from tblTest_Details doe dan werkt het gewoon

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Je hebt in je query tbTest_Details, zonder L, klopt dat wel?

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

Topicstarter
Is slecht overtik werk, in mijn code staat ie wel

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Je moet dan even wat meer code laten zien, ik zie het probleem niet zo snel in deze code.

Je kunt ook even de code in Access zelf uitvoeren (in het query design venster overschakelen op SQL weergave en daar de sql query pasten) om te zien of de query zelf goed werkt.

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

Topicstarter
In Access doet ie het ook niet, wil ook de database zoeken:

code:
1
2
3
SELECT DISTINCT tblTest_Details.Name AS Expr1, 
select Count(*) from tblTest_Details.Status where Name = TD.Name) AS totaant
FROM tblTest_Details AS TD;

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Je hebt nu trouwens in je subquery weer tblTest_Details staan, terwijl in je eerste post tblMED_Test staat.

Probeer zoveel mogelijk to copy/pasten als je code hier post, door het overtikken kun je juist een extra fout introduceren of een bestaande fout juist niet overnemen.

Maar ik zie de fout al:

Je moet select Count(*) from tblTest_Details.Status vervangen door select Count(*) from tblTest_Details. Foutje van mij in m'n voorbeeld

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

Topicstarter
Klopt, dat zag ik maar deze ook:

code:
1
2
3
SELECT DISTINCT TD.Name AS Expr1, 
select Count(*) from tblTest_Details.Status where Name = TD.Name) AS totaant
FROM tblTest_Details AS TD;


Ik moet voor de Name ook de alias van de tabel pakken.

Nu werkt het.......
Pagina: 1