![]() |
Datenbank: MS SQL • Version: 2000 • Zugriff über: ADO Connection
Join innerhalb einer Tabelle
Servus. Bin noch ein blutiger SQL Anfänger und stoße mittlerweile so an meine Grenzen. Und zwar versuche ich ein InnerJoin innerhalb einer Tabelle zu machen. Bin so vorgegangen wie bei 2 unterschiedlichen Tabelle, aber das funktioniert nicht
Ich habe eine Tabelle mit Messwerten. Die Messwerte sind alle einer PrüfID zugeordnet. Es können mehrere Messwerte zu einer PrüfID existieren. Ich will nun anhand der Toleranzen (+/- 0,03) eines Messwertes die IDs filtern, die dafür zutreffen. Von diesen übrig gebliebenen IDs will ich dann einen anderen Messwert auslesen und davon dem Mittelwert bilden. Hier mal ein Bisschen Code (in 2 unterschiedliche Abfragen unterteilt):
SQL-Code:
Kann mir jemand von Euch weiterhelfen? Vielen Dank im Voraus!!!
SELECT dbo.V_JUMO_MEASURE.PRUEFID FROM dbo.V_JUMO_MEASURE
where dbo.V_JUMO_MEASURE.AUFTRAG = '1323259-01' AND dbo.V_JUMO_MEASURE.MW_NAME = 'Temperatur T1 korrigiert' AND (dbo.V_JUMO_MEASURE.IST_WERT >= (dbo.V_JUMO_MEASURE.SOLL_WERT - 0.033)) AND (dbo.V_JUMO_MEASURE.IST_WERT <= (dbo.V_JUMO_MEASURE.SOLL_WERT + 0.033)) SELECT dbo.V_JUMO_MEASURE.PRUEFID, dbo.V_JUMO_MEASURE.IST_WERT FROM dbo.V_JUMO_MEASURE where dbo.V_JUMO_MEASURE.AUFTRAG = '1323259-01' AND dbo.V_JUMO_MEASURE.MW_NAME = 'Widerstand T1 korrigiert' |
Re: Join innerhalb einer Tabelle
Bei Selfjoins benötigst du 2 "Instanzen" einer Tabelle, was du durch Angebae eines Alias erzwingen kannst
SQL-Code:
from
<Tabelle> t1 join <Tabelle> t2 on t2. ... |
Re: Join innerhalb einer Tabelle
Ich weiß nicht, ob ich Dich richtig verstanden habe, aber vielleicht so?
SQL-Code:
SELECT dbo.V_JUMO_MEASURE.PRUEFID, AVG(dbo.V_JUMO_MEASURE.IST_WERT) FROM dbo.V_JUMO_MEASURE
where dbo.V_JUMO_MEASURE.AUFTRAG = '1323259-01' AND dbo.V_JUMO_MEASURE.MW_NAME = 'Widerstand T1 korrigiert' AND dbo.V_JUMO_MEASURE.PRUEFID IN (SELECT dbo.V_JUMO_MEASURE.PRUEFID FROM dbo.V_JUMO_MEASURE where dbo.V_JUMO_MEASURE.AUFTRAG = '1323259-01' AND dbo.V_JUMO_MEASURE.MW_NAME = 'Temperatur T1 korrigiert' AND dbo.V_JUMO_MEASURE.IST_WERT BETWEEN (dbo.V_JUMO_MEASURE.SOLL_WERT - 0.033) AND (dbo.V_JUMO_MEASURE.SOLL_WERT + 0.033)) GROUP BY dbo.V_JUMO_MEASURE.PRUEFID |
Re: Join innerhalb einer Tabelle
Hallo,
wenn ich deine Frage richtig verstehe, ist die Lösung nicht ein JOIN auf die Tabelle selbst, sondern eher eine Unterabfrage: Zitat:
Zitat:
SQL-Code:
Und da muss dann noch der Mittelwert eingebaut werden.
SELECT andererMesswert FROM dbo.V_JUMO_MEASURE
WHERE PruefID IN ( erster Select ); Ich hoffe, ich konnte helfen. Jürgen //Detlef war schneller. |
Re: Join innerhalb einer Tabelle
Stimmt, mit
SQL-Code:
funktioniert es.
SELECT AVG(dbo.V_JUMO_MEASURE.IST_WERT)
FROM dbo.V_JUMO_MEASURE WHERE dbo.V_JUMO_MEASURE.PRUEFID IN ( SELECT dbo.V_JUMO_MEASURE.PRUEFID FROM dbo.V_JUMO_MEASURE where dbo.V_JUMO_MEASURE.AUFTRAG = '1291626-92' AND dbo.V_JUMO_MEASURE.MW_NAME = 'Temperatur T1 korrigiert' AND (dbo.V_JUMO_MEASURE.IST_WERT >= (dbo.V_JUMO_MEASURE.SOLL_WERT - 0.05)) AND (dbo.V_JUMO_MEASURE.IST_WERT <= (dbo.V_JUMO_MEASURE.SOLL_WERT + 0.05)) ) AND dbo.V_JUMO_MEASURE.MW_NAME = 'Widerstand T1 korrigiert' Aber die Idee von mkienzler ist auch nicht schlecht. Wie kann ich denn einen Alias für eine komplette Tabelle vergeben? Welche Abfrage müsste denn theoretisch schneller sein? Vielen Dank |
Re: Join innerhalb einer Tabelle
Einen SELF JOIN hatten wir eben erst:
![]() |
Re: Join innerhalb einer Tabelle
Zitat:
SQL-Code:
Eine Minimalversion für SELF JOIN haben wir gerade unter
SELECT AVG(meas.IST_WERT)
FROM dbo.V_JUMO_MEASURE meas WHERE meas.PRUEFID IN ( ... ) ![]() Jürgen /Detlef war wieder schneller; und der rote Kasten fehlte. |
Re: Join innerhalb einer Tabelle
Zitat:
|
Re: Join innerhalb einer Tabelle
Vielen Dank für die Tipps. Damit kann ich auf jeden Fall was anfangen ;-)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08: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-2025 by Thomas Breitkreuz