0

我试图创建一个场景。我试图在雪花中实现这一目标。ID 是表 2 中的主键,可以使用 ID 列连接两个表。

例如 - 如果查询的输出为 - 2, Er1, Er2, Er2, Er4 那么,第一个 Er2 来自 Table1,第二个 Er2 来自 Table2。在这种情况下,不应考虑第二个 Er2,最终输出应为 - 2, Er1, Er2, Er4

我尝试过以下方式,但很少重复。

SELECT E.ID,
     CASE WHEN listagg ( E.ERROR_NAME || ',' || I.ERROR_NAME ) LIKE '%,'
     THEN LEFT (listagg ( E.ERROR_NAME || ',' || I.ERROR_NAME ), LEN(listagg (E.ERROR_NAME || ',' || I.ERROR_NAME))-1)
      ELSE listagg (E.ERROR_NAME || ',' || I.ERROR_NAME)
      END AS ERROR_NAME_CUSTOM
  from TABLE1  E
  JOIN TABLE2 I ON I.ID = E.ID
    group by E.ID

4

1 回答 1

1

这里可能有一个更优雅的解决方案,但这有效:

with
ERR as
(
select           T1.ID
                ,T1.ERROR_NAME || ',' || T2.ERROR_NAME as ERROR_NAMES
from            TABLE1 T1
    left join   TABLE2 T2
        on      T1.ID = T2.ID
),
COMBINED as
(
select * from ERR, lateral split_to_table(ERROR_NAMES, ',')
)
select ID, listagg(distinct "VALUE", ',') within group (order by "VALUE") from COMBINED group by ID
order by ID
;
于 2021-09-03T22:27:55.370 回答