【问题标题】:Distinct values in List Agg functionList Agg 函数中的不同值
【发布时间】:2016-09-20 14:35:41
【问题描述】:

现在我想要表 A 中名称的记录,这些记录在表 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 函数,但它给了我所有记录。

谁能告诉我如何获取记录

【问题讨论】:

  • 详情请看附图
  • 请输入您的架构和sql
  • 请编辑您的问题并显示您的 SQL。
  • 您确定这是您想要/需要的输出吗?这对我来说没有多大意义。正如 Gordon 所观察到的那样,您似乎想省略具有单个“值”的“名称”,无论该“值”仅出现一次还是重复出现,并且仅包括具有至少两个不同“值”的“名称” ”。我无法想象什么样的业务问题会导致这样的需求。

标签: sql oracle listagg


【解决方案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);

【讨论】:

    【解决方案2】:

    您可以使用连接来连接 id2 字段上的两个表。 然后您可以在“名称”A 表和 group_concat(在 oracle 中它是列表 agg)函数上使用带有 group by 子句的 select 查询从 B 表中选择连接的值字符串。 .... 如果您使用的是 mysql 查询。

    【讨论】:

      猜你喜欢
      • 2023-03-21
      • 2022-11-01
      • 2019-08-22
      • 1970-01-01
      • 2015-02-10
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多