zoukankan      html  css  js  c++  java
  • 有关oracle数据库中多行转换成一行的问题

    第一步

    首先创建一个表格

    View Code
    1 CREATE TABLE TestTitle (
    2 
    3 name   VARCHAR(10),
    4 
    5 titleVARCHAR(10)
    6 
    7 );

    第二步
    插入测试数据

    View Code
    1 INSERT INTO TestTitle VALUES ('张三', '程序员');
    2 INSERT INTO TestTitle VALUES ('张三', '系统管理员');
    3 INSERT INTO TestTitle VALUES ('张三', '网络管理员');
    4 INSERT INTO TestTitle VALUES ('李四', '项目经理');
    5 INSERT INTO TestTitle VALUES ('李四', '系统分析员');

    要求
    对于测试数据,要求查询结果为:

    张三程序员,系统管理员,网络管理员

    李四项目经理,系统分析员

    思路
    简单查看这个结果,很像对字符型的GROUP BY处理。

    数值类型的可以SUM,但是字符类型的无法这么处理。

    只好依次MAX(1) + MAX(2) + MAX(3)这种办法来处理

    实现
    第一步,设置好分组的编号

    View Code
     1 SELECT
     2 
     3 ROW_NUMBER() OVER(PARTITION BY name ORDER BY title) AS no,
     4 
     5 name,
     6 
     7 title
     8 
     9 FROM
    10 
    11 TestTitle
    12 
    13 ORDER BY
    14 
    15 name,
    16 
    17 title

     第二步,根据有编号的子查询,进行分组处理

    View Code
     1 SELECT
     2 
     3 name,
     4 
     5 CASE WHEN COUNT(title) = 1 THEN MAX(title)
     6 
     7        WHEN COUNT(title) = 2 THEN
     8 
     9          MAX( CASE WHEN SubQuery.no = 1 THEN title + '' ELSE '' END )
    10 
    11          + MAX( CASE WHEN SubQuery.no = 2 THEN titleELSE '' END )
    12 
    13        WHEN COUNT(title) = 3 THEN
    14 
    15          MAX( CASE WHEN SubQuery.no = 1 THEN title + '' ELSE '' END )
    16 
    17          + MAX( CASE WHEN SubQuery.no = 2 THEN title + ''ELSE '' END )
    18 
    19          + MAX( CASE WHEN SubQuery.no = 3 THEN titleELSE '' END )
    20 
    21 END AS new_title
    22 
    23 FROM
    24 
    25 (
    26 
    27 SELECT
    28 
    29     ROW_NUMBER() OVER(PARTITION BY name ORDER BY title) AS no,
    30 
    31     name,
    32 
    33     title
    34 
    35 FROM
    36 
    37     TestTitle
    38 
    39 ) subQuery
    40 
    41 GROUP BY
    42 
    43 name

    对于Oracle使用 WMSYS.WM_CONCAT 函数 的方式进行处理(也非常简单)

     SELECT name,WMSYS.WM_CONCAT(title) AS allTitle FROM TestTitle GROUP BY name;

  • 相关阅读:
    幂等性知识学习梳理
    使用Less,FontAwesome 重写EasyUI TreeGrid样式
    根据表达式树动态生成Lambda表达式
    elasticsearch-query-builder, 一款可以基于配置化以及参数绑定的ES语句构造神器
    hadoop2 5个环境配置文件
    hadoop3.0.0 分布式集群安装过程
    linux 常用命令
    securecrt 常用快捷键
    java 面试题
    Spark Streaming 读取 Kafka 数据的两种方式
  • 原文地址:https://www.cnblogs.com/wsl2011/p/2485425.html
Copyright © 2011-2022 走看看