Select: Count verschiedener Spalten

Kann ich innerhalb des Left Join: AND Artikel.status = 'aktuell' anstelle dessen einen Case verwenden, oder eine Unterabfrage wo er nur den ersten Wert des jeweiligen AKEN in Verbindung bringt?

Grund: Jetzt wirft er mir in der Tat alle Datensätze der tab aus (dem himmel sei dank) und füllt dann Spalten mit werden aus der ARTIKEL, sofern Status = 'aktuell'.
Wenn der Status 'aktuell' in der ARTIKEL nicht zutrifft, sind die refernzierten Spaltenwerte logischerweise bei Ausgabe der TAB "null", weil er dann nicht verknüpft.

Daher meine Frage, ob man mit Case anstelle dessen arbeiten kann, wenn es mal für ein aken kein aktuell gibt, soll er mir einfach den nächsten Datenzeilenwert der aken nehmen

Kurzer Exkurs der Tabelle Artikel:
rowid,AKEN, Artikelnummer, AUFLAGE, STATUS, ....
1, 2000, 1234, 2. Auflage, alt
2, 2000, 1234, 3. Auflage, aktuell
3, 3000, 7890, 17. Auflage, aktuell
4, 5000, 5450, 7. Auflage, alt
Es gibt Artikel, die derzeit in keiner Auflage auf dem Markt sind. Daher haben dann alle den Status "alt". Dennoch möchte ich wissen, um welchen (sofern keinen aktuellen Artikel) Alt-Artikel es geht.


In Excel hätte ich mir so beholfen, in dem ich:

1. die Tabelle ARTIKEL sortieren lasse (A-Z) nach Spalte "AKEN" und dann Spalte "Status" (Beispiel sieht dann so aus)
2, 2000, 1234, 3. Auflage, aktuell
1, 2000, 1234, 2. Auflage, alt
3, 3000, 7890, 17. Auflage, aktuell
4, 5000, 5450, 7. Auflage, alt


2. einen Sverweis drauf setze. Sverweis gibt mir dann immer den ERSTEN Treffer aus. Da vorher sortiert wurde ist es sogar idealerweise ein Datensatz mit "aktuell" :)



Ok, glaub das ist jetzt zu kompliziert verständlich dir nahezubringen. Zumal es nun DER Finale-Schlüssel in meiner nun 32 zeiligen Selectabfrage zur anschließenden Tabellengenerierung ist :-((



Ganz ehrlich, die ganzen Probleme hätte ich nicht, wenn die Datenbank des Dienstleisters eindeutig referenziert und normalisiert wäre... Dann bräuchte ich hier nich solche Fragen stellen.
Ich freue mich auf meinen Urlaub und brauch ihn auch echt dringend. Liege momentan Tag und Nacht in Gedanken bei "selects".
 
Werbung:
Liege momentan Tag und Nacht in Gedanken bei "selects".
Geht mir änhlich... Mit 2 Servern zuhause ist das wohl aber auch zu erwarten :)

Zum Thema:
Was du vorhast ist etwas umständlicher... Aber grundsätzlich nicht schwierig.... Hier muss ich aber gestehen werde ich dir wahrscheinlich falsche Syntax liefern (bin aus der Oracle-Ecke...), die Funktionalität wird aber auch von MSSQL unterstützt werden... musst halt nur die Syntax etwas googlen :)
Code:
Select *
From   tab t

Left   Join (Select p.*, row_number() Over(Partition By p.aken Order By Case
                                                                          When p.status = 'aktuell' Then
                                                                            1
                                                                          Else
                                                                            2
                                                                        End asc) as rownumb
             From artikel p) a
On     a.aken = t.aken
And    a.rownumb = 1

Where  t.art = 'selektiert'
Das hier liefert die die Artikeldaten des "aktuellen" Artikels, sofern vorhanden... Und ansonsten die Daten eines zufälligen "veralteten" Artikel-Datensatzes... (Soweit ich das verstanden habe, kann es ja mehrere mit Status "alt" geben?)
 
hmm... glaub das könnte gut aussehen wenn ich durchblicken würde ;)


Darf ich daher noch zwei Erklärungsfragen stellen:

"Join (Select p.*,"
was bedeutet p.* kenne nur select * from...

"From artikel p) a"
hat bestimmt mit meiner ersten Frage zu tun oder?
das a ist wahrscheinlich wieder die Kurzschrift für Tabelle "Artikel"

*schäm*
 
das p ist in diesem Fall nur ein Alias für die Tabelle artikel von der ich selektiere, das "p.*" heißt ich hätte gerne von dem Alias p (hinter dem nunmal die "artikel" tabelle steht) alles (wie ein normales select * from...).

Du darfst dich durch das Sub-Select nicht verwirren lassen.
Ein Sub-Select kann man sich wie in Excel ein zusätzliches Arbeitsblatt vorstellen. Meistens wird hier dann irgendetwas berechnet oder transformiert (in diesem Fall hier werden die Zeilen anhand bestimmter Parameter nummeriert) und das äußere Select greift dann quasi auf diese Zwischentabelle zu.
 
Klasse, dank dir für die Erläuterung. Und bis auf eine Kleinigkeit haben wir jetzt alles so umgebaut, was rund 6 Jahre falsch ausgegeben wurde, bzw. unser Dienstleister nicht hinbekommen hat.

Und ohne dich, ganz ehrlich, würde ich noch immer auf dem Schlauch stehen!!! Daher bedanke ich mich ganz herzlich bei dir, wünsche dir ein schönes Wochenende und entschuldige bitte deine in Anspruch genommene Zeit! Du hast mir nun zu einem beruhigten Urlaub verholfen! Danach gehen die Arbeiten an Hand der Ergebnisse zwar weiter, aber das ist ja erst in 3 Wochen ;)))

Machs gut und nochmal: DANKE !!!
 
Werbung:
Zurück
Oben