joni2000de
Goto Top

MSSQL Zählen der Datensätze nach unterschiedlichen Kriterien

Hi Admins,

ich möchte auf einer MSSQL 2008 R2 DB in einem Select folgende Daten hinzufügen die sich direkt auf das Select beziehen:
1. laufende Nummer des Datensatzes (alle Datensätze hochzählen)
2. laufende Nummer des Datensatzes bezogen auf einen Referenzwert (hochzählen wenn)
3. Anzahl der Datensätze bezogen auf einen Referenzwert (Maximalwert von hochzählen wenn)
So richtig schlau bin ich bei meinen Recherchen derzeit noch nicht geworden. Geht das im gleichen Select?

Beispiel (Referenz Typ):
Typ Wert lfdNR lfdNRTyp maxNRTyp
a 12 1 1 3
a 45 2 2 3
b 87 3 1 2
b 65 4 2 2
a 32 5 3 3

Typ und Wert werden abgefragt, die anderen 3 Spalten sollten sich je nach Ergebnis anpassen.

Danke für eure Hilfe.
Gruß Joni

Content-ID: 182556

Url: https://administrator.de/contentid/182556

Ausgedruckt am: 05.11.2024 um 16:11 Uhr

MadMax
MadMax 26.03.2012 um 12:50:51 Uhr
Goto Top
Moin Joni,

select	Typ,
	Wert,
	row_number () over (order by Wert) as lfdNr,
	row_number () over (partition by Typ order by Wert) as lfdNrTyp,
	count (*) over (partition by Typ) as maxNRTyp
from	<Tabelle>

Gruß, Mad Max
joni2000de
joni2000de 26.03.2012 um 13:23:45 Uhr
Goto Top
Hi Mad Max,

danke, das hilft mir schon sehr weiter. Einziges kleines Problem
row_number () over (order by Wert) as lfdNr
muss sich auf eine Spalte beziehen. Gibt es auch eine Möglichkeit einfach alle Zeilen durchzunummerieren ohne Bezug auf einen bestimmten Wert?

Gruß Joni
MadMax
MadMax 27.03.2012 um 12:42:46 Uhr
Goto Top
Moin Joni,

was meinst Du mit "lfdNr muß sich auf eine Spalte beziehen"? Daß die Nummerierung nach einer bestimmten Spalte erfolgen soll? Dann verwende im "order by" einfach diese Spalte statt der von mir verwendeten Spalte "Wert".

Gruß, Mad Max
joni2000de
joni2000de 27.03.2012 um 14:31:00 Uhr
Goto Top
Hallo Mad Max,

das mit dem order by ist mir schon klar. Mir geht es darum, dass ich in der Spalte laufende Nummer einfach die Nummer der Zeile in der sich der Datensatz befindet erhalte. 1. Datensatz = 1, 2. Datensatz = 2, ...
Dabei ist es eigentlich egal was für Daten sich im Datensatz befinden. Im MSSQL Server Managment Studio ist es die Zahl die links von den Daten steht, die aber nicht ausgegeben wird. Ich dachte, vielleicht gibt es da eine Möglichkeit diesen Wert mit auszugeben.
Bei der Variante mit order by muss ich aufpassen, dass eine Änderung der Sortierung des Selects nicht bei der Abfrage row_number vergessen wird nachzuziehen.

Gruß Joni
MadMax
MadMax 27.03.2012 um 15:49:20 Uhr
Goto Top
Moin Joni,

die aktuelle Zeilennr. der momentanen Ausgabe gibt es leider nicht in SQL Server. Bei Oracle gabs mal eine Pseudospalte namens "rownum", aber SQL Server bietet das nicht.

Du könntest allenfalls die Sortierung bei der lfdNr angeben und die Abfrage dann nach lfdNr sortieren, dann bräuchtest Du auch nur an einer Stelle die Sortierung ändern.

Gruß, Mad Max
joni2000de
joni2000de 28.03.2012 um 11:32:30 Uhr
Goto Top
Hi Mad Max,
danke für deine Info. Dein Tipp mit der Sortierung macht Sinn. Ich komme jetzt soweit klar.
Nochmal Danke!

Gruß Joni