医院名称 科别 其他小科表 医技小科别安徽医科大学 儿科 理疗科、血透中心肿瘤放射科 神经电生理室、超声波室
安徽医科大学 心内科 理疗科、血透中心肿瘤放射科 神经电生理室、超声波室
安徽医科大学 神经内科 理疗科、血透中心肿瘤放射科 神经电生理室、超声波室
安徽医科大学 肾内科 理疗科、血透中心肿瘤放射科 神经电生理室、超声波室
安徽医科大学 呼吸内科 理疗科、血透中心肿瘤放射科 神经电生理室、超声波室
我要变成:
安徽医科大学 儿科 心内科 神经内科 肾内科 呼吸内科 理疗科、血透中心肿瘤放射科 神经电生理室、超声波室
请问如何实现呢?
注意要消除重复的数据哦!
安徽医科大学 心内科 理疗科、血透中心肿瘤放射科 神经电生理室、超声波室
安徽医科大学 神经内科 理疗科、血透中心肿瘤放射科 神经电生理室、超声波室
安徽医科大学 肾内科 理疗科、血透中心肿瘤放射科 神经电生理室、超声波室
安徽医科大学 呼吸内科 理疗科、血透中心肿瘤放射科 神经电生理室、超声波室
我要变成:
安徽医科大学 儿科 心内科 神经内科 肾内科 呼吸内科 理疗科、血透中心肿瘤放射科 神经电生理室、超声波室
请问如何实现呢?
注意要消除重复的数据哦!
SELECT '安徽医科大学' a,'儿科 理疗科、血透中心肿瘤放射科 神经电生理室、超声波室' b FROM dual UNION ALL
SELECT '安徽医科大学' a,'心内科 理疗科、血透中心肿瘤放射科 神经电生理室、超声波室' b FROM dual UNION ALL
SELECT '安徽医科大学' a,'神经内科 理疗科、血透中心肿瘤放射科 神经电生理室、超声波室' b FROM dual UNION ALL
SELECT '安徽医科大学' a,'肾内科 理疗科、血透中心肿瘤放射科 神经电生理室、超声波室' b FROM dual UNION ALL
SELECT '安徽医科大学' a,'呼吸内科 理疗科、血透中心肿瘤放射科 神经电生理室、超声波室' b FROM dual)
SELECT A,
REPLACE(WM_CONCAT(DISTINCT REGEXP_SUBSTR(B, '[^ ]+', 1, L)),
',',
' ') B
FROM T1, (SELECT LEVEL L FROM DUAL CONNECT BY LEVEL <= 100) T2
WHERE LENGTH(B) - LENGTH(REPLACE(B, ' ', '')) + 1 >= T2.L
GROUP BY A;
如果WM_CONCAT(DSITINCT ..)可用。那可参考WITH T1 AS(
SELECT '安徽医科大学' a,'儿科' AS b, '理疗科、血透中心肿瘤放射科' AS C ,'神经电生理室、超声波室' d FROM dual UNION ALL
SELECT '安徽医科大学' a,'心内科' AS b, '理疗科、血透中心肿瘤放射科' AS C ,'神经电生理室、超声波室' d FROM dual UNION ALL
SELECT '安徽医科大学' a,'神经内科' AS b, '理疗科、血透中心肿瘤放射科' AS C ,'神经电生理室、超声波室' d FROM dual UNION ALL
SELECT '安徽医科大学' a,'肾内科' AS b, '理疗科、血透中心肿瘤放射科' AS C ,'神经电生理室、超声波室' d FROM dual UNION ALL
SELECT '安徽医科大学' a,'呼吸内科' AS b, '理疗科、血透中心肿瘤放射科' AS C ,'神经电生理室、超声波室' d FROM dual)
SELECT A,REPLACE(B1,',',' ') B1,REPLACE(C1,',',' ') C1,REPLACE(D1,',',' ') D1
(SELECT A,
ROW_NUMBER() OVER(PARTITION BY A ORDER BY B) RANK,
WM_CONCAT(DISTINCT B) OVER(PARTITION BY A ORDER BY B) AS B1,
WM_CONCAT(DISTINCT C) OVER(PARTITION BY A ORDER BY B) AS C1,
WM_CONCAT(DISTINCT D) OVER(PARTITION BY A ORDER BY B) AS D1
FROM T1)
WHERE RANK =1
没装服务器,不能测试!
select 医院名称,wm_concat(distinct 科别)||','|| wm_concat(distinct 其他小科表)||','||wm_concat(distinct 医技小科别)
group by 医院名称;