在DISTINCT SELECT中将结果合并到Oracle SQL中

时间:2018-08-29 03:36:08

标签: sql oracle

我有这个要求,我要选择不同的order_no,代码,display_order,级别,描述,然后匹配其模式。

我目前有这个sql语句

 SELECT DISTINCT order_no, code, disp_order, lvl, description, 
CASE WHEN pattern='1' THEN supplier_code ELSE NULL END AS pattern1,
CASE WHEN pattern='2' THEN supplier_code ELSE NULL END AS pattern2,
CASE WHEN pattern='3' THEN supplier_code ELSE NULL END AS pattern3, 
CASE WHEN pattern='4' THEN supplier_code ELSE NULL END AS pattern4, 
CASE WHEN pattern='5' THEN supplier_code ELSE NULL END AS pattern5  
from tbl_pattern

这给了我这个结果集

+----------+------+------------+-----+-------------+----------+----------+----------+----------+----------+
| order_no | code | disp_order | lvl | description | pattern1 | pattern2 | pattern3 | pattern4 | pattern5 |
+----------+------+------------+-----+-------------+----------+----------+----------+----------+----------+
| RM001-01 | 1    | 0          | 1   | HK140904-1A |          |          |          |          |   0821   |
| RM001-01 | 1    | 1          | 2   | HK140904-1B |   1021   |          |          |          |          |
| RM001-01 | 1    | 1          | 2   | HK140904-1B |          |   4547   |          |          |          |
| RM001-01 | 1    | 2          | 3   | HK140904-1C |   4547   |          |          |          |          |
| RM001-01 | 1    | 3          | 3   | HK140904-1D |          |          |          |   3540   |          |
| RM001-01 | 1    | 4          | 2   | HK140904-1E |          |          |          |          |          |
+----------+------+------------+-----+-------------+----------+----------+----------+----------+----------+

但是我想要实现的是这样的:

+----------+------+------------+-----+-------------+----------+----------+----------+----------+----------+
| order_no | code | disp_order | lvl | description | pattern1 | pattern2 | pattern3 | pattern4 | pattern5 |
+----------+------+------------+-----+-------------+----------+----------+----------+----------+----------+
| RM001-01 | 1    | 0          | 1   | HK140904-1A |          |          |          |          |   0821   |
| RM001-01 | 1    | 1          | 2   | HK140904-1B |   1021   |   4547   |          |          |          |
| RM001-01 | 1    | 2          | 3   | HK140904-1C |   4547   |          |          |          |          |
| RM001-01 | 1    | 3          | 3   | HK140904-1D |          |          |          |   3540   |          |
| RM001-01 | 1    | 4          | 2   | HK140904-1E |          |          |          |          |          |
+----------+------+------------+-----+-------------+----------+----------+----------+----------+----------+

表中的样本数据

+----------+------+------------+-----+-------------+---------+---------------+
| order_no | code | disp_order | lvl | description | pattern | supplier_code | 
+----------+------+------------+-----+-------------+---------+---------------+
| RM001-01 | 1    | 0          | 1   | HK140904-1A |     5   |     0821      |
| RM001-01 | 1    | 1          | 2   | HK140904-1B |     1   |     1021      |
| RM001-01 | 1    | 1          | 2   | HK140904-1B |     2   |     4547      |
| RM001-01 | 1    | 2          | 3   | HK140904-1C |     1   |     4547      |
| RM001-01 | 1    | 3          | 3   | HK140904-1D |     4   |     3540      |
| RM001-01 | 1    | 4          | 2   | HK140904-1E |         |               |
+----------+------+------------+-----+-------------+---------+---------------+

1 个答案:

答案 0 :(得分:3)

尝试如下

SELECT  order_no, code, disp_order, lvl, description, 
    max(CASE WHEN pattern='1' THEN supplier_code ELSE NULL END) AS pattern1,
    max( CASE WHEN pattern='2' THEN supplier_code ELSE NULL END) AS pattern2,
    max(CASE WHEN pattern='3' THEN supplier_code ELSE NULL END ) AS pattern3, 
    max( CASE WHEN pattern='4' THEN supplier_code ELSE NULL END) AS pattern4, 
    max( CASE WHEN pattern='5' THEN supplier_code ELSE NULL END) AS pattern5  
    from tbl_pattern
    group by order_no, code, disp_order, lvl, description