我们拥有一个Oracle数据库,其中包含数千条从我们这里接受服务的客户的记录。我们提供的服务列表的示例服务表(简体)如下:
Service Table
------------------------------------
| id | service_code | name | price |
------------------------------------
| 1 | 101 | abc | 20 |
| 2 | 102 | xyz | 20 |
------------------------------------
上面是数据库中的简化表。在这里,某些服务(每个记录代表一个服务)是个体的,而某些则是两个服务的组(应该总是以集合/组的形式给出)。
问题:
假设ID为2的服务是一组两个服务。我们需要为其打印发票,以分别显示两项服务的输入。我需要一个SELECT
查询。
Invoice Example:
---------------------------------
| service_code | name | price |
---------------------------------
| 102A | xyz_A | 15 |
| 102B | xyz_B | 05 |
---------------------------------
我知道使用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;
(我知道每个服务代码的case语句将有多个when
)
希望您理解我的问题。 现在问题出在第二子服务上呢?如何获得?有什么办法吗?
second sub service => | 102B | xyz_B | 05 |
答案 0 :(得分:2)
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 */);