![]() |
Datenbank: MSSQ • Version: 2008 • Zugriff über: TSQL
select auf gleiche tabelle
Hallo,
kann mir jemand bei einer Abfrage helfen? Ich muss in einer HEADER-Tabelle die No ermitteln um damit in einer Detail-Tabelle die zugehörigen Daten zu finden wenn die so in Tabelle liegen würden, wäre die Abfrage kein Problem: select * from tabelle where charge = 4711 and Datum >= '10.01.2016' and Zusatz = 'ABC' HEADER: NO Charge Datum Zusatz_1 Zusatz_2 123 4711 10.01.2016 ABC 123 Die HEADER-Tabelle ist aber so aufgebaut: NO Name Wert 1234 Charge 4711 1234 Datum 10.01.2016 1234 Zusatz_1 ABC 1234 Zusatz_2 123 Charge,Datum,Zusatz existieren beliebig oft(die Charge beginnt jedes Jahr wieder bei 1) aber die Kombination der vier Felder ist eindeutig. Ich müsste also eigentlich 4 separte selects auf das gleich Feld (Wert = '4711' / Wert = '10.01.2016' / Wert = 'ABC' / Wert = '123') machen und die Ergebnis so miteinander verbinden, das ich nur die NO zurückbekomme die bei allen 4 Abfragen gleich ist. Mit welcher Abfrage würde ich diese Schnittmenge zurückbekommen? |
AW: select auf gleiche tabelle
Verwende Aliases, dann kannst Du meherere Instanzen einer Tabelle adressieren:
SQL-Code:
Im speziellen Fall benötigst Du Pivotabfragen
select
a.Feld, b.Feld from Tabelle a, Tabelle b where ... ![]() |
AW: select auf gleiche tabelle
Das ist ein SQL-Antipattern (Entity-Attribute-Value Tabelle). Zugriff geht z.B. so
Code:
Das geht, wenn es immer nur diese 4 Namen gibt. Ansonsten muss man das mit dynamischem SQL lösen, d.h. eine Query dynamisch bauen, die alle Namen enthält. Oder mit der Pivot-Funktion im Client (Excel, Delphi o.ä.). Wenn das ein Report werden soll, kann man das sehr elegant mit Fast-Report lösen, ganz ohne Code.
select
(select Wert from Tabelle x where x.ID = t.ID and x.Name = 'Charge') as Charge , (select Wert from Tabelle x where x.ID = t.ID and x.Name = 'Datum') as Datum , (select Wert from Tabelle x where x.ID = t.ID and x.Name = 'Zusatz_1') as Zusatz_1 , (select Wert from Tabelle x where x.ID = t.ID and x.Name = 'Zusatz_2') as Zusatz_2 from Tabelle t where t.ID = 1234 |
AW: select auf gleiche tabelle
Danke für die Antworten. Ich habe es mit mehrfachem inner join auf die gleiche Tabelle hinbekommen!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz