MSSQL Anzahl unterschiedlicher Datensätze zurückgeben
Hi Admins,
ich brauche mal wieder etwas Nachhilfe. Ich habe eine Tabelle die so aussieht:
Jetzt hätte ich gerne, dass zB in einer Spalte [Fehler] die Datensätze gekennzeichnet werden bei denen zwar die Gruppe identisch ist die aber unterschiedliche Konten hinterlegt haben (hier 3+4). Die Datensätze 1+2 können nicht zusammengefasst werden da sich diese in anderen Felder noch unterscheiden (zB Nr). Die Formel in Excel ist kein Problem, aber auf Grund der Datenmenge viel zu langsam. Geht das direkt in SQL?
Danke für eure Hilfe.
Gruß Joni
ich brauche mal wieder etwas Nachhilfe. Ich habe eine Tabelle die so aussieht:
Nr Name Gruppe Konto
1 Maier K1 123456
2 Maier K1 123456
3 Huber K2 456789
4 Huber K2 987654
Jetzt hätte ich gerne, dass zB in einer Spalte [Fehler] die Datensätze gekennzeichnet werden bei denen zwar die Gruppe identisch ist die aber unterschiedliche Konten hinterlegt haben (hier 3+4). Die Datensätze 1+2 können nicht zusammengefasst werden da sich diese in anderen Felder noch unterscheiden (zB Nr). Die Formel in Excel ist kein Problem, aber auf Grund der Datenmenge viel zu langsam. Geht das direkt in SQL?
Danke für eure Hilfe.
Gruß Joni
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 178314
Url: https://administrator.de/forum/mssql-anzahl-unterschiedlicher-datensaetze-zurueckgeben-178314.html
Ausgedruckt am: 23.12.2024 um 11:12 Uhr
12 Kommentare
Neuester Kommentar
Hallo,
Gruß,
Peter
Zitat von @joni2000de:
Die Datensätze 1+2 können nicht zusammengefasst werden da sich diese in anderen Felder noch unterscheiden (zB Nr).
Aber genau dies trifft doch für deine Datensätze 3+4 auch zu?!?Die Datensätze 1+2 können nicht zusammengefasst werden da sich diese in anderen Felder noch unterscheiden (zB Nr).
Gruß,
Peter
Moin joni200de,
das "Having 4>1" hätte geplanterweise interpretiert werden sollen als "Having {Spalte 4} > 1" oder, lesbar ausformuliert, "Having Count(Konto) >1".
Diese Bedingung fehlt übrigens in deinem Statement und es kann -auch wenn es jetzt ohne Syntaxfehler durchläuft- nicht das gewünschte Ergebnis liefern.
Ein "Having Count(Konto) > 1" muss also noch rein in den inneren SELECT und aus dem "LEFT JOIN" ein "JOIN" werden. Jedenfalls IMHO.
Die USING-Klausel kann, wie von dir vermutet, aus Bequemlichkeitsgründen dann benutzt werden, wenn die Spaltennamen in beiden Tabellen gleih sind.
Und dieser Fall ist hier natürlich immer gegeben, da es sich ja bei "den beiden gejointen Tabellen" tatsächlich um physkalisch ein und dieselbe handelt.
Was bei deinem "Count(t.gruppe) as ANZGP" nun herauskommt bzw herauskommen soll, das kann ich überhaupt nicht nachvollziehen.
Steht da etwas sinnvolles im resultset?
Grüße
Biber
das "Having 4>1" hätte geplanterweise interpretiert werden sollen als "Having {Spalte 4} > 1" oder, lesbar ausformuliert, "Having Count(Konto) >1".
Diese Bedingung fehlt übrigens in deinem Statement und es kann -auch wenn es jetzt ohne Syntaxfehler durchläuft- nicht das gewünschte Ergebnis liefern.
Ein "Having Count(Konto) > 1" muss also noch rein in den inneren SELECT und aus dem "LEFT JOIN" ein "JOIN" werden. Jedenfalls IMHO.
Die USING-Klausel kann, wie von dir vermutet, aus Bequemlichkeitsgründen dann benutzt werden, wenn die Spaltennamen in beiden Tabellen gleih sind.
Und dieser Fall ist hier natürlich immer gegeben, da es sich ja bei "den beiden gejointen Tabellen" tatsächlich um physkalisch ein und dieselbe handelt.
Was bei deinem "Count(t.gruppe) as ANZGP" nun herauskommt bzw herauskommen soll, das kann ich überhaupt nicht nachvollziehen.
Steht da etwas sinnvolles im resultset?
Grüße
Biber
Moin Joni2000de,
ein wenig verwirrst du mich schon, offen gestanden.
Wie hängen denn nun "Konto" und "Gruppe" zusammen - du kannst es doch nicht jeden Tag umdefinieren.
Ganz oben in deinem ersten Kommentar hast du geschrieben:
In deiner Abfrage und im geposteten Ergebnis ist es aber nur ein Fehler, wenn eine Gruppe auf mehrere Konten verweist.
Der umgekehrte Fall, also in Satz 1, 2, 7 und 8 zeigen mehrere Gruppen auf ein Konto - das scheint ja okay zu sein.
Wenn denn aber jede Gruppe (zum Beispiel K1) auf im Beispiel oben immer auf Konto 123456 zeigen muss, dann ist es doch "Konto" nur ein abhängiges Attribut einer Gruppe.
Und müsste entsprechend in einer Tabelle "Gruppe" z.B. mit den Feldern "Gruppe, "Gruppenname", "Konto" gepflegt werden
Oder wie ist der Zusammenhang?
Grüße
Biber
ein wenig verwirrst du mich schon, offen gestanden.
Wie hängen denn nun "Konto" und "Gruppe" zusammen - du kannst es doch nicht jeden Tag umdefinieren.
Ganz oben in deinem ersten Kommentar hast du geschrieben:
Ich möchte alle Datensätze kennzeichnen bei denen die [Anzahl Gruppe] und [Anzahl Konten pro Gruppe] unterschiedlich sind.
In deiner Abfrage und im geposteten Ergebnis ist es aber nur ein Fehler, wenn eine Gruppe auf mehrere Konten verweist.
Der umgekehrte Fall, also in Satz 1, 2, 7 und 8 zeigen mehrere Gruppen auf ein Konto - das scheint ja okay zu sein.
Wenn denn aber jede Gruppe (zum Beispiel K1) auf im Beispiel oben immer auf Konto 123456 zeigen muss, dann ist es doch "Konto" nur ein abhängiges Attribut einer Gruppe.
Und müsste entsprechend in einer Tabelle "Gruppe" z.B. mit den Feldern "Gruppe, "Gruppenname", "Konto" gepflegt werden
Oder wie ist der Zusammenhang?
Grüße
Biber
Moin joni2000de,
wäre es dann nicht einfacher, im ersten Schritt einfach ein
...zu machen?
Sollte da mehr als leeres Resultset herauskommen, dann muss du doch ohnehin alle relevanten Sätze der gefundenen Gruppe(n) auf den Schirm holen - um intuitiv die "falschen" zu berichtigen.
Wieo kann denn denn diese "falsche" Zuordnung nicht bei der Erfassung/Eingabe der Daten abgefangen werden?
"Gruppe" und "Konto" sind doch nicht unabhängig voneinander - das ist doch offensichtlch VORHER bekannt und nicht HINTERHER zu berichtigen.
Grüße
Biber
wäre es dann nicht einfacher, im ersten Schritt einfach ein
SELECT gruppe, konto, count(konto) as Anzahl FROM (
SELECT distinct gruppe, konto
from [Test].[dbo].[ZZ_Test]
) Group by gruppe, konto
HAVING count (konto) > 1
Sollte da mehr als leeres Resultset herauskommen, dann muss du doch ohnehin alle relevanten Sätze der gefundenen Gruppe(n) auf den Schirm holen - um intuitiv die "falschen" zu berichtigen.
Wieo kann denn denn diese "falsche" Zuordnung nicht bei der Erfassung/Eingabe der Daten abgefangen werden?
"Gruppe" und "Konto" sind doch nicht unabhängig voneinander - das ist doch offensichtlch VORHER bekannt und nicht HINTERHER zu berichtigen.
Grüße
Biber