2016-09-30 3 views
-1
anzeigen

Häufig muss ich zwei Zeilen oder mehr als zwei Zeilen in der gleichen Tabelle vergleichen und nur nicht identische Spalten finden.Wie mehrere Zeilen in der gleichen Tabelle zu vergleichen und nur die nicht identische Spaltenwerte als Ergebnisse mit Oracle

Könnten Sie mir bitte dabei helfen ??

Tabellenname: Employee_Details

Bedingungen:

  1. Wenn der gleichen Spalte Werte identisch in allen Zeilen sind, dann sollten diese Spalten nicht in den

  2. Wenn die Ergebnisse angezeigt werden Gleiche Spaltenwerte sind nicht identisch, dann sollten diese Spalten allein in den Ergebnissen

angezeigt werden

enter image description here

+0

eine deutliche der Tabelle aller Zeilen nehmen; – XING

+0

Bitte senden Sie Daten als formatierten Text und nicht als Bilder. Formatierter Text hilft Menschen, ein Beispiel zu bauen, etwas auszuprobieren und Ihnen eine getestete Antwort zu geben; Bilder machen Menschen downvote/vote, um die Frage zu schließen – Aleksej

+1

Sie können dies nicht in "Standard" -SQL tun, weil eine SELECT-Anweisung im Voraus wissen muss (nicht nach dem Betrachten der Daten in der Tabelle), wie viele Spalten die Ausgabe wird haben. – mathguy

Antwort

0

Ein einfaches SQL kann keine Ausgabe mit einer variierenden Anzahl von Spalten geben.

Ein etwas anderer Ansatz könnte sein, ein Ergebnis mit allen Spalten der Eingabetabelle zu erhalten, aber mit leeren Werten in den Spalten, die in allen Zeilen alle die gleichen Werte haben.

Zum Beispiel:

create table YOUR_TABLE(a, b, c, d) as 
(
    select 'A', 'b', 'c', 'd' from dual union all 
    select 'A', 'b', 'C', 'd' from dual union all 
    select 'A', 'B', 'cc', 'd' from dual union all 
    select 'A', 'b', 'CC', 'd' from dual 
) 

select case when count(distinct a) over(partition by null) > 1 then a else null end as a, 
     case when count(distinct b) over(partition by null) > 1 then b else null end as b, 
     case when count(distinct c) over(partition by null) > 1 then c else null end as c, 
     case when count(distinct d) over(partition by null) > 1 then d else null end as d 
from YOUR_TABLE 

A B C D 
- - -- - 
    B cc 
    b C 
    b CC 
    b c 
Verwandte Themen