我有一些数据看起来像这样-
ColA ColB ColC
ID1 1 '1-1'
ID2 1 '2-1'
ID2 0 '2-2'
ID3 1 '3-1'
ID3 1 '3-2我需要一个查询(对于Oracle10g),该查询根据ColA的值对行进行分组,然后仅当组中的所有行都有ColC时才返回串联的ColB=1的值。
"1-1"
"3-1,3-2"对于如何编写这样的查询,有什么建议吗?
谢谢!
发布于 2013-03-21 12:50:48
SELECT colA, wm_concat(ColC)
FROM table_name
WHERE colB = 1
GROUP BY colA;LISTAGG EDIT-您也可以像这样使用LISTAGG聚合函数:
SELECT colA, LISTAGG(colC, ',') WITHIN GROUP (ORDER BY ColC)
FROM table_name
WHERE colB = 1
GROUP BY colA;我建议使用LISTAGG,因为它是由Oracle记录的,而wm_concat不是。
EDIT :如果您不希望像ID2这样的行显示,因为它有一个ColB = 0或colB != 1的行,您可以:
SELECT colA, wm_concat(ColC)
FROM table_name t1
WHERE NOT EXISTS (SELECT 1
FROM table_name t2
WHERE colB != 1 -- Or, you can give colB = 0
AND t2.ColA = t1.ColA)
GROUP BY colA发布于 2013-03-21 13:27:29
如果您使用的是Oracle10g,那么
select o1 from (select wm_concat(c3) o1,wm_concat(c2) o2 from table group by c1)
where length(o2)-length(replace(o2,'0',''))=0对于11g
select o1 from (select listagg(c2,',') within group (order by c1) o2,
listagg(c3,',') within group (order by c1) o1 from table group by c1)
where length(o2)-length(replace(o2,'0',''))=0https://stackoverflow.com/questions/15539667
复制相似问题