ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 字符串行转列

字符串行转列

原创 Linux操作系统 作者:SUNBLAZE 时间:2010-07-20 09:13:09 0 删除 编辑
1.数据如下   :
体检号     科室     项目 结果
0000000015 一般情况 身高 1
0000000015 一般情况 体重 2
0000000015 一般情况 腿型 正常
0000000015 一般情况 脚趾 平足
0000000015 一般情况 胸围 33
0000000015 眼科 左眼视力 a
0000000015 眼科 右眼视力 22
0000000015 检验科 低钠试
0000000015 检验科 氨苯喋啶试   6
0000000015 B超 血型 A型
0000000015 B超 血压 6

想要的结果如下
0000000015  眼科     左眼视力a右眼视力22
0000000015  一般情况  身高1体重2腿型正常



WITH fis AS (
SELECT '0000000015' V1, '一般情况' V2, '身高' V3, '1' V4
  FROM DUAL
UNION ALL
SELECT '0000000015', '一般情况', '体重', '2'
  FROM DUAL
UNION ALL
SELECT '0000000015', '一般情况', '腿型', '正常'
  FROM DUAL
UNION ALL
SELECT '0000000015', '一般情况', '脚趾', '平足'
  FROM DUAL
UNION ALL
SELECT '0000000015', '一般情况', '胸围', '33'
  FROM DUAL
UNION ALL
SELECT '0000000015', '眼科', '左眼视力', 'a'
  FROM DUAL
UNION ALL
SELECT '0000000015', '眼科', '右眼视力', '22'
  FROM DUAL
UNION ALL
SELECT '0000000015', '检验科', '低钠试', NULL
  FROM DUAL
UNION ALL
SELECT '0000000015', '检验科', '氨苯喋啶试', '6'
  FROM DUAL
UNION ALL
SELECT '0000000015', 'B超', '血型', 'A型'
  FROM DUAL
UNION ALL
SELECT '0000000015', 'B超', '血压', '6' FROM DUAL )
SELECT v1,v2,max(sys_connect_by_path(v3,','))
FROM
(SELECT v1,v2,v3||v4 v3,row_number() over (PARTITION BY v1,v2 ORDER BY v3) rn FROM fis )
START WITH rn =1
CONNECT BY PRIOR rn=rn-1 AND PRIOR v1=v1 AND PRIOR v2=v2
GROUP BY v1,v2

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12474069/viewspace-668425/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: SQL优化
请登录后发表评论 登录
全部评论

注册时间:2008-08-22

  • 博文量
    35
  • 访问量
    88066