group-by - DB2 独特 + xmlagg 查询

标签 group-by db2 concatenation

我想要相当于 DB2 中 MySql 的 GROUP_CONCAT 功能。

我尝试过 DB2 的 XML Aggrigate 函数来合并 murows。

SELECT a.ID,
       substr(xmlserialize(xmlagg(xmltext( concat(',', SPECIALISATION)))as varchar( 1024 )),2),
       substr(xmlserialize(xmlagg(xmltext(concat(',,, BASIC_SKILL2)))as varchar( 1024 )),2),
       substr(xmlserialize(xmlagg(xmltext(concat(',', BASIC_SKILL1)))as varchar( 1024 )),2) 
FROM candidate_resume_data a,candidate_skills_info b,skill_special_master c,skill_master_basic2 d,skill_master_basic1 e      
WHERE e.SKILL_BASIC1_ID = d.SKILL_BASIC1_ID 
      AND b.ID = a.ID    
      AND d.SKILL_BASIC2_ID = c.SKILL_BASIC2_ID 
      AND b.CANDIDATE_SPECIALISATION_ID = c.SKILL_SPECIAL_ID 
GROUP BY a.ID;

这给了我结果

ID  |    SPECIALISATION |    BASIC_SKILL2           |   BASIC_SKILL1      |
----+---------------------------------------------------------------------+
1   |    Java,C++       |  Development,Development  |   Software,Software |

但我想要 BASIC_SKILL2、BASIC_SKILL1 的独特/独特值。

ID  |    SPECIALISATION |    BASIC_SKILL2   |   BASIC_SKILL1   |
----+-------------------+-------------------+------------------+
1   |    Java,C++       |  Development      |   Software       |

最佳答案

我自己问过同样的问题后才发现你的问题。我想出的解决方案是使用带有 DISTINCT 的公共(public)表表达式。

WITH q1 (id, specialization) AS
  (
    SELECT DISTINCT id, specialization
      FROM table_name
  )
SELECT q1.id,
    XMLELEMENT(
      NAME "Specializations",
      XMLAGG(
        XMLELEMENT(NAME "Specialization", q1.specialization)))
  FROM q1
  GROUP BY q1.id

就您而言,使用子选择会更容易、更清晰(为了清楚起见,省略了 XMLELEMENT 样板文件):

SELECT t.id, XMLAGG(q1.specialization), XMLAGG(q2.basic_skill2),
    XMLAGG(q3.basic_skill1)
  FROM table_name t,
    (SELECT DISTINCT id, specialization FROM table_name) q1,
    (SELECT DISTINCT id, basic_skill2 FROM table_name) q2,
    (SELECT DISTINCT id, basic_skill1 FROM table_name) q3
  WHERE t.id = q1.id AND t.id = q2.id AND t.id = q3.id
  GROUP BY t.id

可能有更简单的方法,但这就是我想出的。

此外,您可能希望利用 XMLQUERY 和 XSLTRANSFORM 等函数。比手动方式更简单且不易出错。

关于group-by - DB2 独特 + xmlagg 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6326940/

相关文章:

mysql - 检索每组中的最后一条记录 - MySQL

mysql - 按最后日期分组 MYSQL

vb.net - 使用 linq vb.net 进行分组和计数

sql - 我需要验证表中的数据,其中 1 列有多个值,但 1 个值只能通过唯一键出现在 1 行中

mysql - 每个唯一列值获取一条记录

sql - DB2 将毫秒转换为时间戳

java - 无法通过 Maven 添加 IBM db2jcc4 jar 文件

mysql - MySQL 中 INSERT INTO 和 LOAD DATA from CSV 的区别

Python 将每月和分钟数据帧与 TZ 感知的日期时间索引相结合

string - 如何批量连接数字?