Doppelte Werte finden (Spezial)

14/07/2008 - 17:31 von Martin Jau | Report spam
Hallo Leute,
ich habe folgendes Problem:

create table t1(MyId int, col1 int, col2 int)
insert into t1 values (1, 12, 99) Beibehalten
insert into t1 values (2, 99, 12) *Löschen
insert into t1 values (6, 3, 1) Beibehalten
insert into t1 values (3, 93, 87) Beibehalten
insert into t1 values (4, 87, 93) *Löschen
insert into t1 values (4, 2, 1) Beibehalten
insert into t1 values (5, 44, 33) Beibehalten
insert into t1 values (6, 33, 44) *Löschen


Es sollten die Werte gelöscht werden deren Kombination doppelt vorkommt
(12,99) Beibehalten aber
(99,12) Löschen

Ich hoffe ich habe mich klar genug Verstàndlich gemacht um das Problem
verstàndlich zu machen,

Bitte um Hilfe,am besten ohne Coursor zu lösen

Vielen Dank Martin
 

Lesen sie die antworten

#1 Elmar Boye
14/07/2008 - 18:27 | Warnen spam
Hallo Martin,

Martin Jau schrieb:
create table t1(MyId int, col1 int, col2 int)
insert into t1 values (1, 12, 99) Beibehalten
insert into t1 values (2, 99, 12) *Löschen
insert into t1 values (6, 3, 1) Beibehalten
insert into t1 values (3, 93, 87) Beibehalten
insert into t1 values (4, 87, 93) *Löschen
insert into t1 values (4, 2, 1) Beibehalten
insert into t1 values (5, 44, 33) Beibehalten
insert into t1 values (6, 33, 44) *Löschen


Es sollten die Werte gelöscht werden deren Kombination doppelt vorkommt
(12,99) Beibehalten aber
(99,12) Löschen




Grundsàtzlich: Mit einem CASE Ausdruck kannst Du die Spalten normalisieren.
Für SQL Server 2005 mit einer CTE könnte das wie folgt aussehen:

WITH TableOrder
AS
(
SELECT
MyId,
CASE WHEN col1 < col2 THEN col1 ELSE col2 END AS colA,
CASE WHEN col1 < col2 THEN col2 ELSE col1 END AS colB,

ROW_NUMBER() OVER (PARTITION BY
CASE WHEN col1 < col2 THEN col1 ELSE col2 END,
CASE WHEN col1 < col2 THEN col2 ELSE col1 END
ORDER BY
CASE WHEN col1 < col2 THEN col1 ELSE col2 END,
CASE WHEN col1 < col2 THEN col2 ELSE col1 END) AS RowNumber
FROM t1
)
SELECT * FROM TableOrder WHERE RowNumber > 1


Gruß Elmar

Ähnliche fragen