2016-08-08 43 views
-2

Ich habe zwei Tabelle wie folgt:Um die beiden Tabellen in Oracle-Datenbank zu vergleichen

Table_1 

Customer Order 
---------------------- 
David  Pizza 
David  Cola 
Jack  Milkshake 
Michael  Pizza 
Michael  Milkshake 
Alan  Cola 
Alan  Pizza 

Table_2 

Customer Order 
---------------------- 
David  Pizza 
David  Cola 
Jack  Milkshake 
Michael  Pizza 
Michael  Milkshake 
Alan  Milkshake 
Alan  Pizza 

Ich habe Code wie folgt aus (ich schrieb Antrag statt Order):

WITH t AS 
(SELECT customer 
    ,row_number() over(PARTITION BY customer ORDER BY "ORDER" DESC) order_no 
    ,"ORDER" 
    ,COUNT(*) over(PARTITION BY customer) order_cnt 
    FROM table_1) 
    SELECT customer, order1, order2, order3, order_cnt "Counts of Orders" 
    FROM t 
    pivot (MAX("ORDER") FOR order_no IN(1 AS order1, 2 AS order2,AS order3)) 
    ORDER BY customer; 

Es macht diese :

Table_1 

Customer  order1  order2  order3 counts of orders 
----------------------------------------------------------- 
David  pizza  cola  null   2 
Jack  milkshake null  null   1 
Michael  pizza milkshake null   2 
Alan   cola  pizza  null   2 

ich den Code table_2 umgesetzt und es wird dies machen:

Customer  Order1  Order2 Order3  Counts of Orders 
------------------------------------------------------------- 
David  Pizza  Cola  null    2 
Jack  Milkshake null  null    1 
Michael  Pizza  Milkshake null    2 
Alan  Milkshake Pizza  null   2 

Ich möchte diese Tabellen vergleichen. Zum Beispiel: David bestellte Pizza und Cola in Tabelle_1 und Tabelle_2. Es ist wahr.

Aber Alan bestellte Cola, Pizza in Table_1 und Milchshake, Pizza in Table_2 Ich möchte Unterschiede zwischen Table_1 und Table_2 sehen.

Ich habe nur diesen Code und meine Tabellen scheinen wie Table_1 und Table_2. Als ich den Code geschrieben habe, sehe ich Bestellungen sowohl in Tabelle_1 als auch in Tabelle_2.

Aber ich möchte Unterschiede zwischen ihnen sehen.

+1

Es besteht keine Notwendigkeit für Pivot hier. Google: 'SQL-Server group concat' – sagi

+0

' order' ist ein reserviertes Wort in Oracle und kann nicht als Spaltenname verwendet werden (es sei denn, Sie umgeben es mit doppelten Anführungszeichen). Es gibt keine Möglichkeit, dass die von Ihnen gepostete Anfrage überhaupt funktioniert. – sstan

Antwort

2

So ähnlich?

WITH t AS 
(SELECT customer 
     ,row_number() over(PARTITION BY customer ORDER BY "ORDER" DESC) order_no 
     ,"ORDER" 
     ,COUNT(*) over(PARTITION BY customer) order_cnt 
    FROM table_1) 
SELECT customer, order1, order2, order3, order_cnt "Counts of Orders" 
FROM t 
pivot (MAX("ORDER") FOR order_no IN(1 AS order1, 2 AS order2, 3 AS order3)) 
ORDER BY customer; 

Hier ist mein Ergebnis:

CUSTOME ORDER1 ORDER2 ORDER3 Counts of Orders 
------- --------- --------- --------- ---------------- 
David Pizza  Cola        2 
Jack Milkshake         1 
Michael Pizza  Milkshake       2 

3 rows selected.