Springen naar inhoud


- - - - -
DB .NET

Meerdere Aggregate In 1 Query

Solved DB

  • Log in a.u.b. om te beantwoorden
Er zijn 5 reacties in dit onderwerp

#1 Hypenate

Hypenate

    Guru Developer

  • Moderators
  • 1188 berichten
    Laatst bezocht 01 Apr 2014 17:38
  • LocatieSint-Truiden
Inzender

Geplaatst op 07 March 2013 - 19:04


Is dit enigzins mogelijk?
Nu doe ik 3 maal een Scalarquery, maar dan moet ik ook weer 3 keer een connectie maken naar de database, vandaar dat ik mss dacht dat het korter kon...
Onderstaand hoe het zou moeten, maar ik vermoed dat SQL zoiets niet aanvaard :0)

SQL Code:
Select max(VerslagId)
en ook
Select Count(verslagId) where locatieId = 1
en ook
Select count(verslagId) where datum between @begindatum and @einddatum
From tblVerslag


1. Lees zeker onze huisregels en gebruik code-tags indien nodig
2. Indien je vraag correct beantwoord is, gelieve dit te melden in de post
-
3. We zijn allemaal vrijwilligers, keep it cool

#2 josk79

josk79

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 553 berichten
    Laatst bezocht vandaag, 00:45

Geplaatst op 07 March 2013 - 23:07

Je kunt gerust 3 queries uitvoeren zonder tussendoor de verbinding te verbreken/maken.

2 andere oplossingen.

1) vervang beide "en ook" door "from tblVerslag union all".
2) select max(verslagid), count(case when locatieid=1 then 1 else null end) from tblVerslag

Maar er is niets mis met 3 losse queries.

(pas op: losse pols toegepast)
Verkoop van Peruaanse producten in Nederland en België. Venta de productos Peruanos en Holanda y Bélgica: http://www.que-rico.nl

#3 Hypenate

Hypenate

    Guru Developer

  • Moderators
  • 1188 berichten
    Laatst bezocht 01 Apr 2014 17:38
  • LocatieSint-Truiden
Inzender

Geplaatst op 09 March 2013 - 10:25

Unable to parse querty text (zelfs indien ik de laatste Select weglaat):

SQL Code:
SELECT max(VerslagId) as MaxId FROM tblVerslag
UNION ALL
SELECT Count(verslagId) As Memos WHERE (locatieId = 1) FROM tblVerslag
UNION ALL
SELECT Count(verslagId) as ToDo WHERE verslagDatumTijd BETWEEN @begindatum AND @einddatum FROM tblVerslag
UNION ALL

1. Lees zeker onze huisregels en gebruik code-tags indien nodig
2. Indien je vraag correct beantwoord is, gelieve dit te melden in de post
-
3. We zijn allemaal vrijwilligers, keep it cool

#4 Johnny

Johnny

    Senior Developer

  • Leden
  • PipPipPip
  • 178 berichten
    Laatst bezocht gisteren, 21:01

Geplaatst op 09 March 2013 - 11:12

Bericht bekijkenHypenate, op 09 March 2013 - 10:25, zei:

Unable to parse querty text (zelfs indien ik de laatste Select weglaat):

SQL Code:
SELECT max(VerslagId) as MaxId FROM tblVerslag
UNION ALL
SELECT Count(verslagId) As Memos WHERE (locatieId = 1) FROM tblVerslag
UNION ALL
SELECT Count(verslagId) as ToDo WHERE verslagDatumTijd BETWEEN @begindatum AND @einddatum FROM tblVerslag
UNION ALL

De laatste UNION ALL moet je weghalen en je Where moet achter de FROM
tevens heeft alleen de 1e AS zin aangezien je maar 1 column terugkrijgt

SQL Code:
SELECT max(VerslagId) as MaxId FROM tblVerslag
UNION ALL
SELECT Count(verslagId) As Memos FROM tblVerslag WHERE (locatieId = 1)
UNION ALL
SELECT Count(verslagId) as ToDo FROM tblVerslag WHERE verslagDatumTijd BETWEEN @begindatum AND @einddatum



#5 Hypenate

Hypenate

    Guru Developer

  • Moderators
  • 1188 berichten
    Laatst bezocht 01 Apr 2014 17:38
  • LocatieSint-Truiden
Inzender

Geplaatst op 09 March 2013 - 14:16

Cool, deze werkt! Thx Johnny

Is er een mogelijkheid om 3 kolommen terug te krijgen ipv 3 rijen?
Niet dat het zoveel uitmaakt, maar het oogt wat mooier en is wat makkelijker in de code, dan moet ik niet itereren door de rijen heen.
1. Lees zeker onze huisregels en gebruik code-tags indien nodig
2. Indien je vraag correct beantwoord is, gelieve dit te melden in de post
-
3. We zijn allemaal vrijwilligers, keep it cool

#6 josk79

josk79

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 553 berichten
    Laatst bezocht vandaag, 00:45

Geplaatst op 09 March 2013 - 15:42

Ja, dat kan met mijn 2e aangekaarte oplossing:

Code:
select max(verslagid) as maxid, count(case when locatieid=1 then 1 else null end) as memos, count(case when verslagDatumTijd BETWEEN @begindatum AND @einddatum then 1 else null end) as todos from tblVerslag


Dit hoort in de meeste smaken van SQL te werken. Welke server gebruik je? Bij acces gaat dat niet en zul je waarschijnlijk iff moeten gebruiken in plaats van case when ... then ... else ... end.
Verkoop van Peruaanse producten in Nederland en België. Venta de productos Peruanos en Holanda y Bélgica: http://www.que-rico.nl





Ook met taq DB .NET, Solved, DB voorzien

0 gebruiker(s) lezen dit onderwerp

0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers

Inloggen


[DB .NET] Untitled 1

Hosting provided by Combell
Met dank aan Jürgen voor de jarenlange inzet van visualbasic.be (anno dec 2000)
Met dank aan Mike en Ronneke voor de jarenlange inzet van vbib.be (anno dec 2010)
vbib.be - vbnet.be - vbdotnet.be - visualbasic.be