表格如下:
+------------+--------------+
| product id | Rates |
+------------+--------------+
| 108 | 10, 20, 30 |
+------------+--------------+
| 109 | 10,30 |
+------------+--------------+
我想创建以下内容:
+------------+--------------+
| Name | Rates |
+------------+--------------+
| 108 | 10 |
+------------+--------------+
| | 20 |
+------------+--------------+
| | 30 |
+------------+--------------+
我想在oracle 11g中使用这个,我在jsp中获取行。
答案 0 :(得分:2)
假设该表名为product_rate
,则查询可能会得到答案:
SELECT CASE
WHEN LEVEL = 1 THEN product_id ELSE NULL END AS Name,
regexp_substr(Rates, '[^,]+', 1, LEVEL) Rates
FROM product_rate
CONNECT BY LEVEL <= length(regexp_replace(Rates, '[^,]+')) + 1;
答案 1 :(得分:1)
尝试使用此查询:
WITH tab(product_id, Rates) AS
(SELECT 108, '10, 20, 30' FROM dual UNION ALL
SELECT 109, '10,30' FROM dual )
-------
--End of data
-------
SELECT CASE WHEN LEVEL = 1 THEN product_id ELSE NULL END AS product_id,
regexp_substr(rates, '[^,]+', 1, LEVEL) rates
FROM TAB
CONNECT BY regexp_substr(rates, '[^,]+', 1, LEVEL) IS NOT NULL
AND PRIOR rates = rates
and prior sys_guid() is not null;
输出:
| PRODUCT_ID | RATES |
|------------|-------|
| 108 | 10 |
| (null) | 20 |
| (null) | 30 |
| 109 | 10 |
| (null) | 30 |