SQL - 使用GROUP BY
问题描述:
时逗号分隔的多个值我有一个看起来像SQL - 使用GROUP BY
CUSTOMER, CUSTOMER_ID, PRODUCT ABC INC 1 XYX ABC INC 1 ZZZ DEF CO 2 XYX DEF CO 2 ZZZ DEF CO 2 WWW GHI LLC 3 ZYX
我想编写一个查询,会做的数据是这样的数据:
CUSTOMER, CUSTOMER_ID, PRODUCTS ABC INC 1 XYX, ZZZ DEF CO 2 XYX, ZZZ, WWW GHI LLC 3 ZYX
使用Oracle 10g,如果有帮助。我看到了一些使用MYSQL的工作,但我需要一个普通的SQL或ORACLE等价物。我也看到了可以制作的存储过程的例子,但是,我不能在我使用的产品中使用存储过程。
这里的,结果怎样在MySQL的工作,如果我用它
SELECT CUSTOMER,
CUSTOMER_ID,
GROUP_CONCAT(PRODUCT)
FROM MAGIC_TABLE
GROUP BY CUSTOMER, CUSTOMER_ID
谢谢。
答
感谢薛明,
我的SQL不是优雅的可能,但我需要,需要SQL只,而不是PLSQL或TSQL的解决方案,所以它结束了看起来像这样:
SELECT CUSTOMER, CUSTOMER_ID, COUNT(PRODUCT) PROD_COUNT,
RTRIM(
XMLAGG(XMLELEMENT (C, PRODUCT || ',') ORDER BY PRODUCT
).EXTRACT ('//text()'), ','
) AS PRODUCTS FROM (
SELECT DISTINCT CUSTOMER, CUSTOMER_ID, PRODUCT
FROM MAGIC_TABLE
) GROUP BY CUSTOMER, CUSTOMER_ID ORDER BY 1 , 2
仍然不完全确定XML功能究竟做了什么,但是当需求出现问题时我会深入研究。
答
我觉得LISTAGG是功能最好的汇总群在这种情况下使用:
SELECT CUSTOMER, CUSTOMER_ID,
LISTAGG(PRODUCT, ', ') WITHIN GROUP (ORDER BY PRODUCT)
FROM SOME_TABLE
GROUP BY CUSTOMER, CUSTOMER_ID
ORDER BY 1, 2
+2
LISTAGG在10g中不可用。 – 2012-04-21 01:14:50
答
Oracle用户功能“wm_concat”被以同样的方式作为LISTAGG除了你不能指定一个分隔符“”默认或排序顺序。但它与10g兼容。
如何在SQL Server – 2012-09-28 11:32:38