GROUP BY VeldId, Veldnaam
Duidelijke uitleg: P&W FAQ - SQL
Oops! Google Chrome could not find www.rijks%20museum.nl
“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.”
Hmm, ik moet toch even refreshen voor ik post.
[ Voor 28% gewijzigd door NMe op 19-08-2005 11:55 ]
'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.
https://fgheysels.github.io/
[ Voor 19% gewijzigd door shades op 19-08-2005 12:51 ]
Verwijderd
Mmm, nee.Verwijderd schreef op vrijdag 19 augustus 2005 @ 12:55:
Ik ken je data structuur en doel van je query niet, maar met HAVING of WHERE zou dat best moeten lukken, schat ik zo. Succes
De <null>'s worden veroorzaakt door de subtotals (die ik dus niet wil) en het grant total (die ik dus wel wil) maar ik ben bang dat ik dat in de code moet afvangen of ik moet een COMPUTE gebruiken maar dan krijg ik 2 sets terug en ik weet niet zo goed hoe ik dat in c# moet oppikken (via dataset ofzo ?)
Oops! Google Chrome could not find www.rijks%20museum.nl
Dat is een beetje ingewikkeld omdat ik de bovenstaande functie sterk vereenvoudigd heb. Het aantal wordt m.b.v. een funtie opgehaald (staat gewoon een simpele COUNT(*) in maar om dat SUM en COUNT niet samen gaan heb ik een functie hiervoor moeten moeten.P_de_B schreef op vrijdag 19 augustus 2005 @ 13:10:
Laat eens zien hoe je tabel eruit ziet, en welke resultaten je graag wilt hebben.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| VeldId VeldNaam Aantal ------- ---------------------- ----------- 1 Gebruiker1. 49 1 NULL 49 2 Gebruiker2 8 2 NULL 8 3 Gebruiker3 0 3 NULL 0 8 Gebruiker4 47 8 NULL 47 27 Gebruiker5 0 27 NULL 0 NULL NULL 104 (11 row(s) affected) |
Wat is dus eigenlijk wil hebben is
1
2
3
4
5
6
7
8
| VeldId VeldNaam Aantal ------- ---------------------- ----------- 1 Gebruiker1. 49 2 Gebruiker2 8 3 Gebruiker3 0 8 Gebruiker4 47 27 Gebruiker5 0 NULL NULL 104 |
(of daar waar NULL staat bij VeldNaam 'Totaal'.)
Ik heb het idee dat je een beetje verkeerd zit te werken, kun je toch een tablelayout en de query die je nu gebruikt posten?
[ Voor 71% gewijzigd door P_de_B op 19-08-2005 13:55 ]
Oops! Google Chrome could not find www.rijks%20museum.nl
Hier is de tablelayout (het gedeelte wat nodig is)

De functie (DBO.fn_AantalReserveringenAuteur )om het SUM, COUNT(*) probleem te omzeilen
1
2
3
4
| DECLARE @Cnt INT SET @Cnt = NULL SELECT @Cnt = COUNT(*) FROM tblReserveringen WHERE fk_AuteurId = @AuteurId RETURN @Cnt |
De query
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| SELECT AuteurId, AuteurNaam, SUM(DBO.fn_AantalReserveringenAuteur(tblAuteurs.AuteurId)) As [Aantal] FROM tblAuteurs WHERE fk_ZaalEigenaarId = ( SELECT fk_ZaalEigenaarId FROM tblAuteurs WHERE AuteurId = @AuteurId ) GROUP BY AuteurId, AuteurNaam WITH ROLLUP |
Waarschijnlijk doe ik te omslachtig. Als het op een andere elegantere manier opgelost kan worden hoor ik dat graag. Leer ik ook weer van.
tblReserveringen: Hierin staan reserveringen in voor diverse (vergader)zalenACM schreef op vrijdag 19 augustus 2005 @ 14:28:
En beschijf eens in woorden wat die query zou moeten doen??
tblAuteurs: Hier staan de auteurs in
tblZaalEigenaren: Hier staan groepen in.
Er zitten een aantal zalen (tabel niet weergegeven) in een Zaaleigenaar groep en een auteur is lid van 1 van die groepen. Op deze manier kan een auteur maar in een select aantal zalen reserveringen plaatsen. Dit wordt in de code afgehandeld.
Wat ik nu wil is om a.d.v. een Auteur (AuteurId) er achter komen hoeveel reserveringen hij/zij gemaakt heeft in welke zaal dan ook en hoeveel reserveringen de groep (tblZaalEigenaren) heeft gemaakt waar zij deel van uit maakt. Resultaat zoals hier beneden wil ik krijgen:
1
2
3
4
5
6
7
8
| AuteurId AuteurNaam Aantal -------- --------------------- ----------- 1 Gebruiker1. 49 2 Gebruiker2 8 3 Gebruiker3 0 8 Gebruiker4 47 27 Gebruiker5 0 NULL NULL 104 |
1
2
3
4
| SELECT AuteurId, AuteurNaam, COUNT(*) as Aantal FROM tblAuteurs A INNER JOIN tblReserveringen R ON A.AuteurId = R.fk_AuteurId GROUP BY AuteurId, AuteurNaam |
Maar volgens mij komt de door jou gegeven gewenste output niet overeen met hetgeen je beschrijft. Wil je de totalen per zaalgroep in een aparte query, of in deze erbij?
Oops! Google Chrome could not find www.rijks%20museum.nl
1
2
3
4
5
6
7
8
9
| DECLARE @AuteurId INT SET @AuteurId = 2 SELECT AuteurId, AuteurNaam, COUNT(*) as Aantal FROM tblAuteurs A INNER JOIN tblReserveringen R ON A.AuteurId = R.fk_AuteurId --LEFT JOIN tblReserveringen R ON A.AuteurId = R.fk_AuteurId WHERE fk_ZaalEigenaarid = (SELECT fk_ZaalEigenaarId FROM tblAuteurs WHERE AuteurId = @AuteurId) GROUP BY AuteurId, AuteurNaam ORDER BY AuteurId |
Verder wil ik eigenlijk ook het totaal van die COUNT(*) hebben dus zoiets als maar dan zonder de subtotals
1
2
3
4
5
6
7
8
| DECLARE @AuteurId INT SET @AuteurId = 2 SELECT AuteurId, AuteurNaam, COUNT(*) as Aantal FROM tblAuteurs A INNER JOIN tblReserveringen R ON A.AuteurId = R.fk_AuteurId WHERE fk_ZaalEigenaarid = (SELECT fk_ZaalEigenaarId FROM tblAuteurs WHERE AuteurId = @AuteurId) GROUP BY AuteurId, AuteurNaam WITH ROLLUP ORDER BY AuteurId |
COUNT(tblReserveringen.*) levert vast een beter resultaat op?
Zie ook:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| acm=# select * from test;
a | b
---+---
1 | 1
1 | 2
2 | 3
acm=# select * from testref;
a
---
1
2
acm=# select t.a, count(*), count(r.*) from test t
left join testref r on t.b = r.a group by t.a;
a | count | count
---+-------+-------
2 | 1 | 0
1 | 2 | 2 |
Ja ik snap em..ACM schreef op vrijdag 19 augustus 2005 @ 15:44:
COUNT(*) zal per definitie wel 1 of meer teruggeven omdat er toch minstens 1 record is (met een null, ok)
COUNT(tblReserveringen.*) levert vast een beter resultaat op?
Snap sql2000 deze constuctie wel ?
Als ik dat doen dan levert dat de volgens foutmelding op:
Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near '*'.
1
2
3
4
| SELECT AuteurId, AuteurNaam, COUNT(R.*) as Aantal FROM tblAuteurs A LEFT JOIN tblReserveringen R ON A.AuteurId = R.fk_AuteurId GROUP BY AuteurId, AuteurNaam |
[ Voor 3% gewijzigd door shades op 19-08-2005 15:57 ]
Verwijderd
Check of er een probleem is met het gebruik van een alias door de volledige tabelnaam daar neer te zetten, en als dat niet werkt, vervang dat de * door het ID veld van de tblReserveringen tabel.
ISNULL
Replaces NULL with the specified replacement value.
Syntax
ISNULL ( check_expression , replacement_value )
Arguments
check_expression
Is the expression to be checked for NULL. check_expression can be of any type.
replacement_value
Is the expression to be returned if check_expression is NULL. replacement_value must have the same type as check_expresssion.
Return Types
Returns the same type as check_expression.
RemarksThe value of check_expression is returned if it is not NULL; otherwise, replacement_value is returned.
[ Voor 92% gewijzigd door RobIII op 19-08-2005 16:17 ]
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
Alleen jammer dat COUNT(R.*) niet door sql2k begrepen wordt
Verwijderd schreef op vrijdag 19 augustus 2005 @ 16:13:
Raar.
Check of er een probleem is met het gebruik van een alias door de volledige tabelnaam daar neer te zetten, en als dat niet werkt, vervang dat de * door het ID veld van de tblReserveringen tabel.
tblReserveringen noch tblReserveringen.ReserveringID werkt maar ReserveringID weer wel. Weer wat geleerd
[ Voor 14% gewijzigd door shades op 19-08-2005 16:28 ]
Die heb ik alleen van een Copy/Paste uit dit topic. Het gaat om de ISNULL, welke de makkelijkste oplossing is voor je probleem...shades schreef op vrijdag 19 augustus 2005 @ 16:26:
[...]
Alleen jammer dat COUNT(R.*) niet door sql2k begrepen wordt
1
2
3
4
5
| Select X, Y, IsNull(Z,0) From blabla Left outer join ... ... ... |
Ik paste niet voor niks een stuk uit de books online eronder. Een beetje zelf je grijze massa gebruiken mag wel hoor
[ Voor 15% gewijzigd door RobIII op 19-08-2005 16:34 ]
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
I.t.t. de andere aggregate-functies geeft COUNT per definitie 0 of meer terugRobIII schreef op vrijdag 19 augustus 2005 @ 16:16:
IsNull(COUNT(R.*),0) as Aantal
Dus je isnull is tamelijk zinloos, het probleem was juist dat er 1 uitkwam of een syntax-error.
Anyway, postgresql vond die count(r.*) wel best (en zou ook prima gewerkt hebben met count(r.id)) en ik heb geen SQL Server bij de hand om alles wat ik wil daarop te testen
Waarschijnlijk moet je dat in losse queries uitvoeren. Maar kijk nog even naar dit topic voor wat gespeel met aggregates:shades schreef op vrijdag 19 augustus 2005 @ 16:26:
tblReserveringen noch tblReserveringen.ReserveringID werkt maar ReserveringID weer wel. Weer wat geleerdNu moet ik nog een het totaal van alles hebben. Een WITH ROLLUP zou werken maar dan krijg ik weer die overbodige NULL values. Die dubbele NULL, die moet ik hebben of is het handiger een een extra query die alleen dat doet in het leven te roepen ?
[rml][ mysql] punten optellen[/rml]
Euh ja, zoiets maar dat dat niet gaat ben ik middels dit topic een beetje achter gekomen.EfBe schreef op vrijdag 19 augustus 2005 @ 16:38:
totaal van een column: COUNT(DISTINCT colname). Ik begrijp overigens echt geen r**t van wat je wilt doen/bereiken, behalve dan dat ik DENK dat je je halve database wilt aggregaten in een 2D table, maar dat gaat veelal niet.
Ik maak wel een losse querie voor die laatste. Dat topic is inderdaad een erg leuke om doorgelezen te hebben. Gelijk bookmark van gemaakt. Ik ben in iedergeval heel wat wijzer geworden.ACM schreef op vrijdag 19 augustus 2005 @ 18:29:
[...]
I.t.t. de andere aggregate-functies geeft COUNT per definitie 0 of meer terug
Dus je isnull is tamelijk zinloos, het probleem was juist dat er 1 uitkwam of een syntax-error.
Anyway, postgresql vond die count(r.*) wel best (en zou ook prima gewerkt hebben met count(r.id)) en ik heb geen SQL Server bij de hand om alles wat ik wil daarop te testen
[...]
Waarschijnlijk moet je dat in losse queries uitvoeren. Maar kijk nog even naar dit topic voor wat gespeel met aggregates:
[rml][ mysql] punten optellen[/rml]
[ Voor 51% gewijzigd door shades op 19-08-2005 22:59 ]
Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com
Phoe, das best wel onbekend terrein. Ik ga in iedergeval wel een poging wagen.EfBe schreef op zaterdag 20 augustus 2005 @ 11:11:
Nou het gaat wel, maar niet met straight forward queries. Je zou in de OLAP cube queries kunnen gaan kijken, je gebruikt tenslotte toch SQLServer. Even books online erbij en dan heb je zo je 1e cube query gemaakt, waarbij het je waarschijnlijk wel lukt deze data te verzamelen in 1 lijst.