【问题标题】:To compare the two tables in Oracle database比较Oracle数据库中的两个表
【发布时间】:2016-08-08 12:19:37
【问题描述】:

我有两个如下表:

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

我有这样的代码(我写的是请求而不是订单):

 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;

它正在做这个:

  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

我实现了代码 Table_2,它正在这样做:

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

我想比较这些表。例如:David 在 Table_1 和 Table_2 中点了披萨和可乐。是真的。

但艾伦在 Table_1 中点了可乐、比萨饼,在 Table_2 中点了奶昔、比萨饼 我想看看 Table_1 和 Table_2 之间的区别。

我只有那个代码,我的表看起来像 Table_1 和 Table_2。 编写代码时,我在 Table_1 和 Table_2 中都看到了订单。

但我想看看它们之间的区别。

【问题讨论】:

  • 这里不需要 Pivot。谷歌:SQL-Server group concat
  • order 是 Oracle 中的保留字,不能用作列名(当然,除非用双引号括起来)。您发布的查询根本无法正常工作。

标签: database oracle pivot-table


【解决方案1】:

这样的?

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;

这是我的结果:

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

3 rows selected.

【讨论】:

    猜你喜欢
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    • 2021-04-23
    • 1970-01-01
    • 2011-11-28
    • 2023-03-06
    • 2017-09-21
    相关资源
    最近更新 更多