Abfrage als Vergleich zweier Datensätze möglich?
Klaus
- datenbank
Hallo,
stellt euch vor, ich habe eine Tabelle in der ich wöchtentlich die Preisentwicklung einiger Artikel speichere. Wie z.B. die Spritpreise (nur als Beispiel).
Ich habe in der Tabelle also die Kalenderwoche, die Artikelnummer und den Preis.
Kann ich in einer Abfrage realisieren, dass ich 2 Kalenderwochen miteinander vergleichen kann?
Problematisch wird es wohl noch bei Nichtvorhandensein eines Artikels in einer der zu vergleichenden Wochen. Hier sollte dann Null als Preis angezeigt werden.
(Um beim Beispiel zu bleiben, kam irgendwann der E10 dazu, oder "verbleit" fiel weg)
Klaus
Tach!
Kann ich in einer Abfrage realisieren, dass ich 2 Kalenderwochen miteinander vergleichen kann?
Datensätze einer Tabelle lassen sich nicht untereinander vergleichen. Du kannst aber dieselbe Tabelle nochmal unter einem anderen Alias joinen und dann die Vergleiche durchführen.
Problematisch wird es wohl noch bei Nichtvorhandensein eines Artikels in einer der zu vergleichenden Wochen. Hier sollte dann Null als Preis angezeigt werden.
Das kommt auf die Art des Joins an, ob wenigstens ein Datensatz ((Left) Outer Join) oder keiner (Inner Join) den Weg in die Ergebnismenge findet.
dedlfix.
Das kommt auf die Art des Joins an, ob wenigstens ein Datensatz ((Left) Outer Join) oder keiner (Inner Join) den Weg in die Ergebnismenge findet.
Ich habe es mit
select a.feld1,a.feld2,a.woche as woche1, a.wert as wert1, b.woche as woche2,b.wert as wert2 from test2 as a left join test2 as b on a.feld1 = b.feld1 where a.woche = 10 and b.woche = 15
versucht, aber erhalte nur die Einträge, die in beiden Wochen existieren.
Ich habe mit left join, left outer join, inner join etc. probiert, aber bekam nie alle Einträge.
Tach!
Ich habe es mit
select a.feld1,a.feld2,a.woche as woche1, a.wert as wert1, b.woche as woche2,b.wert as wert2
from test2 as a
left join test2 as b on a.feld1 = b.feld1
where a.woche = 10 and b.woche = 15
> versucht, aber erhalte nur die Einträge, die in beiden Wochen existieren.
Wenn du feld1 mit feld1 verbindest, kommen immer links und rechts Ergebnisdatensätze zustande, weil zu jedem Wert in feld1 (was auch immer da drin stehen mag) der Tabelle a auch immer mindestens derselbe Datensatz in Tabelle b gefunden wird und niemals eine der beiden Seiten null werden kann. Damit hast du trotz "left" das Resultat eines Inner Join. Und dann filtert dein WHERE den nicht angezeigten Rest weg. Die Verknüpfung der Wochen muss eine der Join-Bedung werden. (Dabei gehen auch Formeln à la ON a.woche = b.woche + 1.)
dedlfix.
Die Verknüpfung der Wochen muss eine der Join-Bedung werden. (Dabei gehen auch Formeln à la ON a.woche = b.woche + 1.)
Da der User vorgibt, welche beiden Wochen verglichen werden sollen. Dabei ist er frei, welche Woche er zuerst nennt, das kann also Woche 11 mit Woche 48 oder auch Woche 50 mit Woche 3 sein.
Ich hab wirklich keine Idee, wie ich da die beiden Wochen verknüpfen könnte.
Klaus
Tach!
Ich hab wirklich keine Idee, wie ich da die beiden Wochen verknüpfen könnte.
Habs nicht probiert, aber vielleicht so?
... LEFT JOIN zweite tabelle mit alias ON deine erste bedingung AND a.woche = x AND b.woche = y
dedlfix.
Hallo,
Kann ich in einer Abfrage realisieren, dass ich 2 Kalenderwochen miteinander vergleichen kann?
Was soll denn der Vergleich erbringen? Die Preisentwicklung für ein bestimmtes Produkt?
Eine diesbezügliche Abfrage wird auf einen Selfjoin (danke dedlfix) hinauslaufen, where klauselt das Produkt und between die Zeiträume.
Problematisch wird es wohl noch bei Nichtvorhandensein eines Artikels in einer der zu vergleichenden Wochen. Hier sollte dann Null als Preis angezeigt werden.
Kein Problem.
Schöne Grüße.
Kann ich in einer Abfrage realisieren, dass ich 2 Kalenderwochen miteinander vergleichen kann?
Was soll denn der Vergleich erbringen? Die Preisentwicklung für ein bestimmtes Produkt?
Letztlich ist es etwas komplizierter, also Vergleich Warenausgang, offene Liefermenge pro Kunde, Artikel und eben 2 Kalenderwochen miteinander gegenübergestellt.
Ein anderes Beispiel könnte es vielleicht besser veranschaulichen.
Nehmen wir die gemessenen Durchschnittstemperaturen pro Monat und Urlaubsziel.
Der Benutzer möchte zwei Monate direkt miteinander vergleichen.
Pro Monat können aber auch Urlaubsziele hinzukommen und auch welche wegfallen.
Die Tabelle enthält die Felder (das Jahr mal vernachlässigt und nur positive Temperaturen) Ziel, Monat, und Temperatur.
Mir ist nicht klar, wie die Abfrage aussehen könnte, wenn die Quelle bsp. so aussieht:
Ziel1 01 20
Ziel2 01 15
Ziel3 01 05
Ziel1 05 34
Ziel3 05 11
Ziel4 05 17
Und als Ergebnis sowas rauskommen soll:
Ziel1 01 20 05 34
Ziel2 01 15 05 leer (oder auch 0)
Ziel3 01 05 05 11
Ziel4 01 leer 05 17
Klaus
Kann ich in einer Abfrage realisieren, dass ich 2 Kalenderwochen miteinander vergleichen kann?
Was soll denn der Vergleich erbringen? Die Preisentwicklung für ein bestimmtes Produkt?
Letztlich ist es etwas komplizierter, also Vergleich Warenausgang, offene Liefermenge pro Kunde, Artikel und eben 2 Kalenderwochen miteinander gegenübergestellt.
Ein anderes Beispiel könnte es vielleicht besser veranschaulichen.
Nehmen wir die gemessenen Durchschnittstemperaturen pro Monat und Urlaubsziel.
Der Benutzer möchte zwei Monate direkt miteinander vergleichen.
Pro Monat können aber auch Urlaubsziele hinzukommen und auch welche wegfallen.Die Tabelle enthält die Felder (das Jahr mal vernachlässigt und nur positive Temperaturen) Ziel, Monat, und Temperatur.
Mir ist nicht klar, wie die Abfrage aussehen könnte, wenn die Quelle bsp. so aussieht:
Temperaturentwicklung ist dasselbe in grün wie die Preisentwicklung:
Ich würde ein Statement präparieren und das für jeden Zielort einzeln feuern, Zielort als Platzhalter. Die Darstellung könnte ein Liniendiagramm sein, wobei die Farbe einer Linie einem Zielort zugeordnet ist.
Ungetested ;)