List Agg函数中的不同值

时间:2016-09-20 14:35:41

标签: sql oracle listagg

My Data in the tables

Simplification

现在我想要表A中Name的记录,表B中有不同的值。

例如

* A will have records A1,A1,C1,D1
* B will have records B1,B1,B1,B1
* C will have records C1,C1
* D will have records D1,E1
* E will have only one record E1

我需要输出

A A1,A1,C1,D1
D D1,E1

我使用了ListAgg函数,但它给了我所有记录。

任何人都可以告诉我如何获取记录

2 个答案:

答案 0 :(得分:1)

嗯。嗯。 。 。您不希望获得listagg()的唯一值。您只想过滤掉所有值相同的结果行:

select a.name, listagg(b.value, ',') within group (order by a.id2) as val_str
from a join
     b
     on a.id2 = b.id2
group by a.name
having min(b.value) <> max(b.value);

答案 1 :(得分:-1)

您可以使用联接来加入id2字段上的两个表。 然后你可以在&#39; Name&#39;上使用select by子句的select查询。表和group_concat(在oracle中是list agg)函数用于从B表中选择值的连接字符串。 ....如果您使用的是mysql查询。