MSSQL Probleme bei NULL und COUNT

volker2

Grünschnabel
Hallo,

folgender SQL Aufruf:
---schnipp---
SELECT server,count(*) AS Anzahl FROM table WHERE confirm IS NULL GROUP BY server
---schnapp---

Resultat ist, das ich zu allen eingetragen Servern bei denen NULL in der confirm Spalte eingetragen ist die Anzahl dieser NULL Eintraege erhalte.

Allerdings will ich auch die Namen der anderen Server erhalten, bei denen kein NULL Eintrag vorhanden ist. Bei diesen soll einfach "0" in der count(*) Spalte zurueckgegeben werden.

Allerdings schaffe ich nicht ISNULL hier einzubauen und komme auch mit google etc. weiter. Wie kann ich das ganze bewerkstelligen und alle Server sehen?

Danke,
Volker
 
Wenn du das where rein nimmst, KANN er NUR Zeilen finden die NULL sind. Also muss das where definitiv weg, weil du willst ja beide zahlen haben....

Das group macht das gleiche wie vorher, nur das du pro server 2 zeilen bekommst, einmal mit dem zähler für NULL und einmal für den zähler <> NULL

Eigentlich ist es genau das was du haben wolltest, ansonsten beschreibe dein problem nochmal etwas genauer...

Marcus
 
ripkens hat gesagt.:
Wenn du das where rein nimmst, KANN er NUR Zeilen finden die NULL sind. Also muss das where definitiv weg, weil du willst ja beide zahlen haben....

Das group macht das gleiche wie vorher, nur das du pro server 2 zeilen bekommst, einmal mit dem zähler für NULL und einmal für den zähler <> NULL

Eigentlich ist es genau das was du haben wolltest, ansonsten beschreibe dein problem nochmal etwas genauer...

Zwei Zeilen sind kein Problem, allerdings ist das ganze auch noch von anderen Spalten abhaengig, genauer noch von einer. Ich habe drei Spalten die es zu beachten gibt:
computername || ErrorTypeName || confirm

Dabei will ich bei allen Servern die bei denen in ErrorTypeName "Error event" steht die jeweiligen Servernamen mit der Anzahl der NULL (d.h. keine Werte) in der confirm Spalte haben.

Nehme ich nun
---schnipp---
"SELECT computername,count(*) AS Anzahl FROM tab_raw
WHERE EventTypeName='Error event' GROUP BY computername,confirm"
---schnapp---
erhalte ich natuerlich die Abzaehlung der EventTypeName Spalte auf die WHERE Definition.

Am optimalsten waer eine Rueckgabe
"||<servername>||<#NULL in confirm>||<# !NULL in confirm>||"
sofern das einfach und verstaendlich in SQL zu implementieren ist.

(Perl-)Skriptresultat soll eine Liste von "Servername: <#NULL>/<# !NULL>" sein.

Danke & Grüsse,
Volker
 
Hallo,

versuch's mal hiermit:
Code:
SELECT
  computername,
  COUNT(confirm) AS not_null_in_confirm,
  COUNT(*) - COUNT(confirm) AS null_in_confirm
FROM tab_raw
WHERE EventTypeName = 'Error event'
GROUP BY computername
Bin allerdings mit MSSQL nicht sonderlich vertraut, also könnten noch kleinere Anpassungen nötig sein.

Grüße,
Matthias
 
Matthias Reitinger hat gesagt.:
versuch's mal hiermit:
Code:
SELECT
  computername,
  COUNT(confirm) AS not_null_in_confirm,
  COUNT(*) - COUNT(confirm) AS null_in_confirm
FROM tab_raw
WHERE EventTypeName = 'Error event'
GROUP BY computername
Bin allerdings mit MSSQL nicht sonderlich vertraut, also könnten noch kleinere Anpassungen nötig sein.

Klappt. Vielen, vielen Dank! Wusste garnicht das man an der Stelle eine arithmetische Berechnung durchfuehren kann. Wieder etwas dazu gelernt.

Der unterschied von MSSQL zu MySQL (genauso wie MySQL und Postgres etc) liegt nur daran das meistens einzelne Funktionen nicht gleich bzw. vorhanden sind und es in seltenen Faellen Probleme mit der Syntax gibt (z.B. bei NULL geht bei MSSQL "EventTypeName = NULL", was allerdings bei anderen SQL DB's geht).

Gruss,
Volker
 
Zurück