nikolai
Goto Top

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.

Content-Key: 381549

Url: https://administrator.de/contentid/381549

Printed on: April 19, 2024 at 09:04 o'clock

Member: TheJoker2305
TheJoker2305 Mar 11, 2019 at 12:37:26 (UTC)
Goto Top
Auch wenn die Frage schon recht alt ist, so will ich doch eine Lösung anbieten.

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