Doppelte Einträge aus zwei Tabellen bei select excluden
Hallo zusammen,
ich habe zwei Tabellen welche gleich aufgebaut sind. Wir ziehen immer die Daten mit dem Datum von gestern aus der Datenbank.
Aktuell mache ich das noch relativ simpel mit einem union. Hier erst mal der grobe Aufbau der Tabelle:
+-------------+------------+----------+
| name. | date | sindex |
+-------------+------------+----------+
Ein Name kann sowohl in Tabelle A als auch Tabelle B auftauchen. Das ist so gewollt und korrekt. Allerdings ist der sindex unterschiedlich.
In ganz seltenen Fällen kann der sindex aber auch identisch sein. Zudem wird für den Insert der Wert (float) auf 2 Stellen gerundet.
Wenn ein Name in beiden Tabellen vorkommt, soll nur er Eintrag mit dem höheren sindex (float) angezeigt werden. Hat jemand eine Idee für eine
Lösung? Ich habe es schon mit JOINS versucht aber keinen brauchbaren Lösungsansatz gefunden.
Danke.
ich habe zwei Tabellen welche gleich aufgebaut sind. Wir ziehen immer die Daten mit dem Datum von gestern aus der Datenbank.
Aktuell mache ich das noch relativ simpel mit einem union. Hier erst mal der grobe Aufbau der Tabelle:
+-------------+------------+----------+
| name. | date | sindex |
+-------------+------------+----------+
Ein Name kann sowohl in Tabelle A als auch Tabelle B auftauchen. Das ist so gewollt und korrekt. Allerdings ist der sindex unterschiedlich.
In ganz seltenen Fällen kann der sindex aber auch identisch sein. Zudem wird für den Insert der Wert (float) auf 2 Stellen gerundet.
Wenn ein Name in beiden Tabellen vorkommt, soll nur er Eintrag mit dem höheren sindex (float) angezeigt werden. Hat jemand eine Idee für eine
Lösung? Ich habe es schon mit JOINS versucht aber keinen brauchbaren Lösungsansatz gefunden.
Danke.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 381549
Url: https://administrator.de/forum/doppelte-eintraege-aus-zwei-tabellen-bei-select-excluden-381549.html
Ausgedruckt am: 16.03.2025 um 02:03 Uhr
1 Kommentar
Auch wenn die Frage schon recht alt ist, so will ich doch eine Lösung anbieten.
Variante 1
Variante 2
Nicht getestet, aber so sollte es gehen.
Viele Grüße
thejoker2305
Variante 1
WITH CTE as (
SELECT
name, max(sindex)
FROM
tabelleA
WHERE
date = convert(date,getdate(),104)
GROUP BY
name
UNION
SELECT
name, max(sindex)
FROM
tabelleB
WHERE
date = convert(date,getdate(),104)
GROUP BY
name)
SELECT
name, max(sindex)
FROM
cte
group by
name
Variante 2
SELECT
CASE WHEN isnull(a.name) THEN b.name ELSE a.name END,
max(CASE WHEN a.sindex >= b.sindex OR isnull(b.sindex) THEN a.sindex ELSE b.index END)
FROM
tabelleA a
LEFT JOIN
tabelleB b on a.date = b.date and a.name = b.name
GROUP BY
CASE WHEN isnull(a.name) THEN b.name ELSE a.name END
Nicht getestet, aber so sollte es gehen.
Viele Grüße
thejoker2305