Как преобразовать одну запись в несколько записей в SQL? - PullRequest
0 голосов
/ 30 января 2019

У нас есть база данных Oracle с тысячами записей клиентов, которые воспользовались нашими услугами.Пример таблицы услуг (упрощенно) со списком предоставляемых нами услуг выглядит следующим образом:

Service Table
------------------------------------
| id | service_code | name | price |
------------------------------------
|  1 |     101      |  abc |   20  |
|  2 |     102      |  xyz |   20  |
------------------------------------

Выше приведена упрощенная таблица из базы данных.Здесь некоторые из сервисов (каждая запись представляет сервис) являются индивидуальными, а некоторые представляют собой группу из двух сервисов (которые должны предоставляться всегда как набор / группа).

Проблема: Предположим, что сервис с идентификатором 2 является группой из двух сервисов.Нам нужно распечатать счет, показывающий ввод обеих услуг в отдельности.Мне нужен SELECT запрос для этого.

Invoice Example:
    ---------------------------------
    | service_code |  name  | price |
    ---------------------------------
    |     102A     |  xyz_A |   15  |
    |     102B     |  xyz_B |   05  |
    ---------------------------------

Я знаю, используя оператор case Oracle, я могу изменить значения следующим образом:

SELECT 
CASE id WHEN 2 THEN '102A'
END AS 'service_code'
CASE id WHEN 2 THEN 'xyz_A'
END AS 'name'
CASE id WHEN 2 THEN 15
END AS 'price'
FROM customers;

(я знаю, что будет несколько when в регистре для каждого сервисного кода)

Надеюсь, вы поняли мою проблему. Теперь проблема в том, что насчет второго субсервиса?Как это получить?Есть ли способ для этого?

second sub service => |     102B     |  xyz_B |   05  |

1 Ответ

0 голосов
/ 30 января 2019
SELECT service_code, name, price FROM service where service_code not in (102/* set of grouped services */)
union
SELECT service_code || 'A', name || '_A', price-5 FROM service where service_code in (102/* set of grouped services */)
union
SELECT service_code || 'B', name || '_B', price-15 FROM service where service_code in (102/* set of grouped services */);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...