Toon posts:

[MS SQL]COUNT 0 ipv NULL

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zit met problemen in verband met een sql-statement.

Ik wil op een bepaald moment tellen hoeveel telefoonnummers er in mijn database zitten. Tot nu toe ging dat goed, tot ik plots voor de situatie kwam te staan dat er GEEN telefoonnummers waren.

Ik gebruik COUNT(*) als statement om te tellen, maar als er geen telefoonnummers zijn dan geeft dit, in plaats van een integer, NULL terug. Het probleem is dat mijn programma dan crasht omdat hij die NULL dan in een database wil opslaan.

Het aanpassen van mijn programma om te controleren op NULL-waarden gaat heel wat aanpassingen betekenen en daarom zou ik liever mijn SQL-statement aanpassen zodat ipv NULL, 0 terug gegeven wordt.

  • tijn
  • Registratie: Februari 2000
  • Laatst online: 22-03 21:36
Misschien wil ISNULL(COUNT(*), 0) wel werken in dat geval

Cuyahoga .NET website framework


  • sopsop
  • Registratie: Januari 2002
  • Laatst online: 07-05 15:06

sopsop

[v] [;,,;] [v]

En als je als defaultwaarde van een telefoonnummer in je tabel i.p.v. Null een lege string neerzet?

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
boppert schreef op maandag 04 april 2005 @ 17:41:
En als je als defaultwaarde van een telefoonnummer in je tabel i.p.v. Null een lege string neerzet?
Null en lege string zijn 2 aparte zaken, het is beter om dit soort zaken in je select op te vangen in plaats van je data aan te passen.

Verwijderd

Topicstarter
Raar genoeg werkt ISNULL ook niet, al begrijp ik niet hoe het komt.

Mijn statement:
code:
1
SELECT ISNULL(COUNT(*),0) AS Aantal FROM Telefoonnummers, Jobnummers WHERE Telefoonnummers.GSM = '1' AND Telefoonnummers.FAX = '0' AND Telefoonnummers.Volgnummer = Jobnummers.Volgnummer AND Jobnummers.Jobnummer = '4' GROUP BY Telefoonnummers.Volgnummer ORDER BY Aantal DESC


De tabel Telefoonnummers bevat 4 kolommen.
- Volgnummer : het volgnummer van de medewerker
- Telefoonnummer : telefoonnummer van de medewerker
- GSM : 0 of 1 afhankelijk of het een gsm-nummer is of niet
- FAX : 0 of 1 afhankelijk of het een fax-nummer is of niet

De tabel Jobnummers bevat 2 kolommen:
- Volgnummer : het volgnummer van de medewerker
- Jobnummer : het jobnummer waar de medewerker werkt

Met dit statement wil ik het volgende bereiken:
Op basis van het jobnummer ga je op zoek naar alle medewerkers die daar werken. Vervolgens tel je het aantal telefoonnummers per medewerker en je houdt het grootste cijfer over.
(zo weet ik hoeveel tabellen ik moet voorzien voor in een csv te schrijven)

Het statement werkt perfect als er iemand een telefoonnummer heeft, maar in het speciale geval waar niemand een telefoonnummer heeft krijg ik een leeg resultaat terug i.p.v. 0. Ik weet echt niet aan wat het ligt.

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Vreemd, hier komt er gewoon 0 uit en geen null :?
Draai je versie 7 of 2000? Ik weet dat er daar verschillen tussen zitten.

Verwijderd

Topicstarter
raptorix schreef op maandag 04 april 2005 @ 18:18:
Vreemd, hier komt er gewoon 0 uit en geen null :?
Draai je versie 7 of 2000? Ik weet dat er daar verschillen tussen zitten.
Ik gebruik 2000. Er komt trouwens niet expliciet "null" in de query analyser maar er komt gewoon niets (enkel de hoofding) als ik het statement uitvoer.

Verwijderd

Verwijderd schreef op maandag 04 april 2005 @ 17:31:1
Ik wil op een bepaald moment tellen hoeveel telefoonnummers er in mijn database zitten. Tot nu toe ging dat goed, tot ik plots voor de situatie kwam te staan dat er GEEN telefoonnummers waren.

Ik gebruik COUNT(*) als statement om te tellen, maar als er geen telefoonnummers zijn dan geeft dit, in plaats van een integer, NULL terug.
Verwijderd schreef op maandag 04 april 2005 @ 18:16:
Mijn statement:
code:
1
2
3
4
5
6
7
8
SELECT ISNULL(COUNT(*),0) AS Aantal
FROM Telefoonnummers, Jobnummers
WHERE Telefoonnummers.GSM = '1'
AND Telefoonnummers.FAX = '0'
AND Telefoonnummers.Volgnummer = Jobnummers.Volgnummer
AND Jobnummers.Jobnummer = '4'
GROUP BY Telefoonnummers.Volgnummer
ORDER BY Aantal DESC

Het statement werkt perfect als er iemand een telefoonnummer heeft, maar in het speciale geval waar niemand een telefoonnummer heeft krijg ik een leeg resultaat terug i.p.v. 0. Ik weet echt niet aan wat het ligt.
Verwijderd schreef op maandag 04 april 2005 @ 18:30:
Ik gebruik 2000. Er komt trouwens niet expliciet "null" in de query analyser maar er komt gewoon niets (enkel de hoofding) als ik het statement uitvoer.
Dus het resultaat klopt gewoon!
Ik zou zelf maar eens goed (laten) analyseren wat er allemaal gebeurt en wat je wilt.

  • Bananeman
  • Registratie: Juli 2000
  • Niet online
Ik denk dat het door de GROUP BY komt. De COUNT(*) geeft telkens aan hoeveel telefoonnummers er in een "groep" zitten. Aangezien de tabel leeg is, is er uberhaupt geen groep en kan er dus ook niet worden geretourneerd hoeveel nummers er in die groep zitten... aangezien die groep er niet is :)

Oplossing is de GROUP BY weglaten, maar ik heb niet gekeken wat je query functioneel gezien doet en of je in het licht daarvan de GROUP BY wel kunt weglaten.

Motor-forum.nl


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Wat is uberhaupt het doel van die group by ?
Als je per volgnummer het aantal wilt weten, waarom selecteer je het volgnummer niet mee? En als je alleen het totaal van de telefoonnummers wilt weten en de volgorde je eigenlijk niks uitmaakt, vanwaar de group en order ?
Pagina: 1