Avatar billede luzk Nybegynder
17. marts 2003 - 16:35 Der er 6 kommentarer og
1 løsning

count = 0 på NULL værdier

Hej,

Jeg sidder med tre tabeller i en MS SQL 7.0 database, hvor jeg gerne vil lave et lidt specielt count på der desværre giver mig problemer.

De tre tabeller:

User
UID (int)
...

UserRoleMap
UID (INT)
RID (INT)
Status (smallint)

Role
RID (INT)
Name (navarchar 50)
Description (ntext)

Det jeg gerne vil tælle på, er hvor mange brugere der har de forskellige roller. Der er nogle roller hvor der endnu ikke er tilknyttet brugere, og der vil jeg gerne have udskrevet et 0 (nul), dette skulle derfor give en liste der ser nogenlunde sådan ud:

Administrator (small)  0
Administrator (Medium)  2
Administrator (Large)  1
SuperUser              10
User                10000
...

Når jeg laver en normal sammensætning af de tre tabeller med en LEFT OUTER JOIN, kommer der ikke nogen på Administrator (small), og derfor kan jeg desværre ikke bruge det.
Jeg har fundet frem til at NULL værdier normalt ikke tælles med, men er der nogen måde at komme uden om dette?

Nogen der kan hjælpe mig med dette?
Avatar billede techhouse Nybegynder
17. marts 2003 - 16:44 #1
Denne skule gøre det du ønsker!

select R.Name, count(UID) from UserRoleMap UR right join Role R on (UR.RID=R.RID) group by UR.RID, R.Name

Jeg benytter ikke User da alt information findes i UserRoleMap og kun Role til at hente navnet.

/Thomas
Avatar billede luzk Nybegynder
17. marts 2003 - 16:54 #2
Hmmm - mig der ikke lige havde forklaret godt nok...
Der er endnu en parameter i User tabellen, der hedder shouldUpdate, og denne skal være som en del af WHERE clausen - fx WHERE User.shouldUpdate = 1

jeg så at det andet virker, men hvis du kan hjælpe mig med at smide den sidste table på, så er pointene dine :D

/Luzk
Avatar billede techhouse Nybegynder
17. marts 2003 - 17:12 #3
Sådan...

select R.Name, count(UR.UID) from UserRoleMap UR
right join Role R on (UR.RID=R.RID and UR.UID in (Select UID from [User] where shouldUpdate =1))
group by UR.RID, R.Name

/Thomas
Avatar billede techhouse Nybegynder
18. marts 2003 - 07:53 #4
Kunne den bruges?
Avatar billede luzk Nybegynder
18. marts 2003 - 09:52 #5
Nej desværre ikke helt.
Den kommer godt nok med dem der er 0 (nul) nu, men den lister/tælelr dem forkert:

Administrator (small)  0
Administrator (Medium)  1
Administrator (Medium)  1
Administrator (Large)  1
SuperUser              1
SuperUser              1
SuperUser              1

What to do?

/Luzk
Avatar billede techhouse Nybegynder
18. marts 2003 - 09:58 #6
Ikke hos mig! Er SQL 100% som jeg skrev den? Evt send den du har lavet!
Tak

Name                                                         
-------------------------------------------------- -----------
Administrator (Large)                              0
Administrator (Medium)                            0
Administrator (Small)                              1
SuperUser                                          2
User                                              0

(5 row(s) affected)
Avatar billede luzk Nybegynder
18. marts 2003 - 14:46 #7
Heh - havde
GROUP BY UR.UID - derfor fejlen :D

mange tak for hjælpen *s*

/Luzk
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester