budda
Goto Top

Doppelte Datensätze entfernen, aber nicht anhand alle Spalten

Hallo,

folgende Problematik:

Ich benötige auf einem MS SQL 2005 ein View das die Datensätze aus 2 verschiedenen Tabellen zusammenführt. Hierbei kann es aber vorkommen das identische Datensätze in den Tabellen vorhanden sind. Soweit so gut, kann man ja mit UNION machen.
Aber die Datensätze beinhalten leider Spalten vom Typ TEXT die nicht vergleichbar sind, zudem sind die Datensätze teilweise nicht 100% gleich, so das sie nicht gefiltert würden.

Ich möchte nun im Prinzip Spalte1, Spalte2, Spalte3 und Spalte4 haben, aber der vergleich auf doppelte Datensätze soll nur anhand von Spalte1 und Spalte2 gemacht werden.

Ist das überhaupt möglich? Ich hab es bisher nur mit einer temporären Tabelle hinbenkommen, wo ich Tabelle1 und Tabelle2 per UNION zusammenführe aber nur Spalte1 und Spalte2 selecte und das ergebnis in eine temptabelle packe.
Diese benutze ich dann wiederum um mir anschließen per join die anderen benötigten Spalten aus den 2 Tabellen zu holen. Nur kann ich ja keine temptabellen in einem view benutzen.

Jemand noch eine Idee wie ich das bewerkstelligen könnte?

Gruß
Budda

Content-Key: 107635

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

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

Member: nxclass
nxclass Jan 30, 2009 at 13:51:38 (UTC)
Goto Top
leg Dir doch in jeder SELECT Anweisung der UNION Abfrage 2 zusätzliche Felder mit Kopien der Spalte1 und Spalte2 an, dabei manipulierst du deren Inhalt so, dass du Ihn gruppieren könntest. (Großschreibung, Trimmen, auf 128 Zeichen kürzen, ...)

dann machst du um die UNION Abfrage einfach eine SELECT Anweisung und gruppierst nach den 2 neuen Spalten.

hoffe das Klappt so .. face-wink
Member: Guenni
Guenni Jan 30, 2009 at 18:53:09 (UTC)
Goto Top
Hi Budda,


eine neue Tabelle aus zwei Tabellen erstellst du so:


create neue_tabelle

select tabelle1.spaltenname1, tabelle1.spaltenname2 . . . usw., tabelle2.spaltenname1 . . . usw.

from tabelle1, tabelle2

where tabelle1.spaltenname1=tabelle2.spaltenname1

and tabelle1.spaltenname2=tabelle2.spaltenname2

Das sogenannte Qualifizieren, . . . tabelle1.spaltenname . . ., wäre notwendig, wenn die Spaltennamen

in Tabelle1 und Tabelle2 gleich sind.


Die Syntax zum Erstellen von Views unter MS kenne ich nicht, aber ich vermute mal, dass es gleich ist,

also **create view . . . usw. "


Gruß

Günni
Member: MadMax
MadMax Feb 02, 2009 at 01:01:04 (UTC)
Goto Top
Hallo Budda,

select Spalte1, Spalte2, Spalte3, Spalte 4
from Tabelle1
union all
select Spalte1, Spalte2, Spalte3, Spalte 4
from Tabelle2 t2
where not exists (select * from Tabelle1 t1 where t1.Spalte1 = t2.Spalte1 and t1.Spalte2 = t2.Spalte2)

bringt alle Zeilen aus Tabelle1 und alle Zeilen aus Tabelle2, die nicht in Spalte1 und Spalte2 mit einer Zeile aus Tabelle1 übereinstimmen.

Gruß, Mad Max
Member: Budda
Budda Feb 02, 2009 at 09:55:44 (UTC)
Goto Top
Besten Dank Mad Max, das war genau das was ich gebraucht habe.