MS-Office-Forum
Google
   

Zurück   MS-Office-Forum > Microsoft Access & Datenbanken > SQL
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads Der Renner, 11 Entwicklertools für Access, Tipps & Trick und offene Datenbanken zum einzigartigen Preis.
Themen-Optionen Ansicht
Alt 06.01.2018, 15:15   #1
GünterD
Neuer Benutzer
Neuer Benutzer
Standard T-SQL : MSSQL 2012 - Bei NULL Ausgabe 0

Hallo Zusammen,

ich habe folgende SQL-Abfrage

Code:

SELECT Count(ttbl.[AG]) AS Anz, ttbl.iDMC
FROM ttbl
GROUP BY ttbl.iDMC, ttbl.AG
HAVING (((ttbl.iDMC)="0023") AND ((ttbl.AG)=0));
Das Ergebnis lautet

Zitat:

4 0023

Was muss ich an dieser Abfrage
Code:

Code:
SELECT Count(ttbl.[AG]) AS Anz, ttbl.iDMC
FROM ttbl
GROUP BY ttbl.iDMC, ttbl.AG
HAVING (((ttbl.iDMC)="0023") AND ((ttbl.AG)=1));
ändern um

Zitat:

0 0023

zu erhalten, wenn kein Datensatz gefunden wird.

Für eure Hilfe im Voraus vielen Dank.

__________________

Gruß Günter
GünterD ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 06.01.2018, 15:27   #2
hcscherzer
MOF Guru
MOF Guru
Standard

Die Situation, dass etwas ausgegeben werden soll, obwohl nichts gefunden wird, ist ja in sich etwas widersprüchlich.
Es lässt sich aber durch den Einsatz einer Hilfstabelle lösen, in der alle möglichen Wert vorkommen, nach denen gruppiert werden soll.
Mittels einer LEFT JOIN Verknüpfung von der Hilfstabelle auf die zu untersuchenden Daten und ggf. der Function ISNULL() zur Anzeige leerer Datenfelder auf der rechten Seite, kann es aber gelingen.

__________________

Freundlichen Gruß
Hans-Christian
-----------------------------------------
Oft erwünscht, selten beachtet: nach Erledigung des Problems den Thread als erledigt zu markieren
-----------------------------------------
Ich möchte nur Mitglied in einem Verein sein, der Leute wie mich nicht als Mitglied aufnimmt (Groucho Marx).
-----------------------------------------
Ab sofort regelmässig: MOF Stammtisch in Bremen. Näheres hier.
hcscherzer ist gerade online  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 06.01.2018, 20:39   #3
GünterD
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo hcscherzer,

danke für den Tipp, das passt jetzt.

__________________

Gruß Günter
GünterD ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 07.01.2018, 09:23   #4
GünterD
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard SQL-Abfrage bringt nicht "0"

Hallo Zusammen,

ich muss das u.a. Thema doch nochmals aufgreifen, da es nicht immer funktioniert.
Mit dieser Abfrage
Code:

SELECT        ISNULL(COUNT(dbo.ttbl_Daten.K0014), 0) AS kDMCv, ttbl_Daten_1.iDMC
FROM            dbo.ttbl_Daten RIGHT OUTER JOIN
                         dbo.ttbl_Daten AS ttbl_Daten_1 ON dbo.ttbl_Daten.iDMC = ttbl_Daten_1.iDMC
GROUP BY ttbl_Daten_1.iDMC
HAVING        (ttbl_Daten_1.iDMC = N'002340500112018010208222100232')
erhalte ich das gewünschte Ergebnis

Zitat:

0 002340500112018010208222100232

mit dieser Abfrage
Code:

SELECT        ISNULL(COUNT(dbo.ttbl_Daten.ArbeitsErgebnis), 0) AS SnOK, ttbl_Daten_1.iDMC
FROM            dbo.ttbl_Daten RIGHT OUTER JOIN
                         dbo.ttbl_Daten AS ttbl_Daten_1 ON dbo.ttbl_Daten.iDMC = ttbl_Daten_1.iDMC
WHERE        (dbo.ttbl_Daten.ArbeitsErgebnis = 1)
GROUP BY dbo.ttbl_Daten.ArbeitsErgebnis, ttbl_Daten_1.iDMC
HAVING        (ttbl_Daten_1.iDMC = N'002340500112018010208222100232')
bekomme ich nichts zurück geben.
Ich möchte in dem 2. Fall das gleiche Ergebnis zurückbekommen wie im 1. Fall. In beiden Fällen sind mit den angegebenen Bedingungen keine Datensätze vorhanden.
Was mache ich falsch?

Im Voraus Danke für eure Hilfe.

__________________

Gruß Günter
GünterD ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 07.01.2018, 16:28   #5
hcscherzer
MOF Guru
MOF Guru
Standard

Auch im Kriterium muss die NUUL Behandlung stattfinden:
Code:

WHERE        ISNULL(dbo.ttbl_Daten.ArbeitsErgebnis, 1) = 1

__________________

Freundlichen Gruß
Hans-Christian
-----------------------------------------
Oft erwünscht, selten beachtet: nach Erledigung des Problems den Thread als erledigt zu markieren
-----------------------------------------
Ich möchte nur Mitglied in einem Verein sein, der Leute wie mich nicht als Mitglied aufnimmt (Groucho Marx).
-----------------------------------------
Ab sofort regelmässig: MOF Stammtisch in Bremen. Näheres hier.
hcscherzer ist gerade online  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 07.01.2018, 16:59   #6
GünterD
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard SQL-Abfrage bringt nicht "0"

Hallo Hans-Christian,

mit deinem Tip hat sich leider nichts geändert

Code:

SELECT        ISNULL(COUNT(dbo.ttbl_Daten.ArbeitsErgebnis), 0) AS SnOK, ttbl_Daten_1.iDMC
FROM            dbo.ttbl_Daten RIGHT OUTER JOIN
                         dbo.ttbl_Daten AS ttbl_Daten_1 ON dbo.ttbl_Daten.iDMC = ttbl_Daten_1.iDMC
WHERE        (ISNULL(dbo.ttbl_Daten.ArbeitsErgebnis, 0) = 1)
GROUP BY dbo.ttbl_Daten.ArbeitsErgebnis, ttbl_Daten_1.iDMC
HAVING        (ttbl_Daten_1.iDMC = N'002440600112018010609493600899')
Oder habe ich es falsch verstanden?

__________________

Gruß Günter
GünterD ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 07.01.2018, 19:47   #7
ebs17
MOF Guru
MOF Guru
Standard

Ich verstehe die obige Diskussion nicht. COUNT braucht keine NULL-Behandlung, wenn nichts da ist, ist das Zählergebnis 0 (wie man das intuitiv erwartet).
Der OUTER JOIN ist beim Zählen auch nicht notwendig.

Das im HAVING-Teil aufgeführte Kriterium gehört in den WHERE-Teil. HAVING ist dazu da, um Aggregate zu filtern, die mit dem gruppieren erzeugt werden, während WHERE vor dem Gruppieren filtert. Nebenbei verringert das Filtern vor Gruppieren die zu verarbeitende Datenmenge.

COUNT(ArbeitsErgebnis) ... zählt die Felder mit Inhalt, NULL wird dabei nicht berücksichtigt
COUNT(*) ... zählt die Datensätze

Testabfrage:
Code:

SELECT 
   COUNT(*) AS SnOK 
FROM 
   dbo.ttbl_Daten 
WHERE 
   1 = 0

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}
Dein Dankeschön: DBWiki=>Spende

Geändert von ebs17 (07.01.2018 um 19:52 Uhr).
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 10.01.2018, 09:23   #8
GünterD
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard gelöst

Hallo Eberhardt,

du hast mit deiner Abfrage grundsätzlich recht.
Ich brauche aber eine zusätzliche Spalte aus der Tabelle.
Mit eine Unterabfrage habe ich es gelöst.

__________________

Gruß Günter
GünterD ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 10.01.2018, 09:32   #9
ebs17
MOF Guru
MOF Guru
Standard

Code:

SELECT 
   iDMC,
   COUNT(*) AS SnOK 
FROM 
   dbo.ttbl_Daten 
WHERE 
   1 = 0
GROUP BY
   iDMC
Zusätzliche Felder führen zu einem differenzierteren Zählen.

Den Sinn des obigen (OUTER) JOIN's kann ich nicht erkennen.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}
Dein Dankeschön: DBWiki=>Spende
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 10.01.2018, 09:47   #10
GünterD
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard Ergebnis - keine Ausgabe

Hallo Eberhardt,

leider funktioniert deine Abfrage nicht.
Ich erhalte keine Ausgabe von Daten.

__________________

Gruß Günter
GünterD ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 10.01.2018, 10:32   #11
ebs17
MOF Guru
MOF Guru
Standard

Sorry, ich hatte die Aufgabe nicht richtig erfasst. Hans-Christian hat in #2 schon den richtigen Ansatz gegeben, der muss dann nur nachfolgend richtig umgesetzt werden.
Der Grundansatz lautet
Code:

... FROM VollstaendigeMenge
  LEFT OUTER JOIN BetrachteteMenge ...
... also etwa ...
Code:

SELECT A.iDMC, COUNT(B.iDMC) AS XX
FROM
(SELECT iDMC FROM dbo.ttbl_Daten WHERE iDMC > 34 GROUP BY iDMC) AS A
LEFT OUTER JOIN
(SELECT iDMC FROM dbo.ttbl_Daten WHERE Arbeitsergebnis > 15) AS B
ON A.iDMC = B.iDMC
GROUP BY A.iDMC
Unterabfrage A enthält die vollständige Menge für die Verknüpfung, hier auf eine Gruppe von iDMC begrenzt. In der Praxis würde man eher diejenige Tabelle verwenden, den den Äquivalent zu iDMC als Primärschlüssel enthält, um sich so schon mal das Gruppieren zu sparen).
Unterabfrage B enthält die betrachtete Menge. Bereits da muss die Filterung nach den anderen Feldern erfolgen, also vor einem Verknüpfen.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}
Dein Dankeschön: DBWiki=>Spende
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 10.01.2018, 12:36   #12
GünterD
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard passt perfekt!!

passt perfekt,
vielen Dank

__________________

Gruß Günter
GünterD ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:27 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

Copyright ©2000-2010 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günther Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.
Beachten Sie bitte auch unsere Nutzungsbedingungen.