日期:2014-05-17 浏览次数:20939 次
WITH temp_tab1 AS
(
SELECT 1 AS ID , '辽宁省' AS "省份" , '0' AS "上级" FROM dual UNION ALL
SELECT 2 AS ID , '沈阳市' AS "省份" , '1' AS "上级" FROM dual UNION ALL
SELECT 3 AS ID , '大连市' AS "省份" , '1' AS "上级" FROM dual UNION ALL
SELECT 4 AS ID , '吉林省' AS "省份" , '0' AS "上级" FROM dual UNION ALL
SELECT 5 AS ID , '长春市' AS "省份" , '4' AS "上级" FROM dual UNION ALL
SELECT 6 AS ID , '延边市' AS "省份" , '4' AS "上级" FROM dual
)
SELECT /*CASE WHEN a.上级 = 0 THEN a.省份 ELSE NULL END AS COL1 ,
CASE WHEN A.上级 = b.ID THEN A.省份 ELSE NULL END AS col2 */
a.省份 ,
WMSYS.WM_CONCAT(CASE WHEN B.上级 = A.ID THEN B.省份 ELSE NULL END) AS "城市"
FROM TEMP_TAB1 A,TEMP_TAB1 B
GROUP BY a.省份
HAVING WMSYS.WM_CONCAT(CASE WHEN B.上级 = A.ID THEN B.省份 ELSE NULL END) IS NOT NULL
------解决方案--------------------
WITH t AS
(
SELECT 1 AS ID , '辽宁省' AS "省份" , '0' AS "上级" FROM dual
UNION ALL
SELECT 2 AS ID , '沈阳市', '1' FROM dual
UNION ALL
SELECT 3 AS ID , '大连市', '1' FROM dual
UNION ALL
SELECT 4 AS ID , '吉林省', '0' FROM dual
UNION ALL
SELECT 5 AS ID , '长春市', '4' FROM dual
UNION ALL
SELECT 6 AS ID , '延边市', '4' FROM dual
)
select t.省份, t1.城市
from t,
(select 上级, wm_concat(省份) 城市
from t
where 上级 <> '0'
group by 上级) t1
where t.id = t1.上级
省份 城市
------ --------------------------------------------
辽宁省 沈阳市,大连市
吉林省 长春市,延边市