Объединение результата в Oracle SQL в DISTINCT SELECT - PullRequest
0 голосов
/ 29 августа 2018

У меня есть это требование, где я выбираю отдельный 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 голосов
/ 29 августа 2018

Попробуйте как ниже

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...