我正在尝试将一堆行的列进行连接,但在添加列的值之前需要验证一些条件,所以基本上可以说我有一个包含 userId、discountCode 和 flag 的表(0,1,2)
userId discountCode FLAG
abo1 remise 1 1
abo1 Remise 2 2
abo1 remise 100% 0
abo1 remise 16% 0
abo2 remise 1 0
abo2 Remise 2 0
abo2 remise 100% 0
abo2 remise 16% 0
我需要的是,对于每个用户,我必须将折扣代码连接在一列中,但在以下情况下: 如果该用户的所有标志均为 0,我们将采用所有折扣代码 如果存在 0 和其他值的混合,我们不会添加标志为 0 的折扣代码 如果所有折扣代码都是<> 0,我们将它们全部添加。 所以之前的数据结果应该是:
userId discountCode
abo1 remise 1 | Remise 2
abo2 remise 1 | Remise 2 | remise 100% | remise 16%
TRIM(
TRAILING ',' FROM (
XMLAGG(TRIM(COALESCE(discountCode , -1) || '') ) (VARCHAR(1000))
)
我使用此函数将折扣代码分组在一列中,但我不知道如何检查标志的条件
我们可以使用
SUM()
窗口函数来计算每个用户的总数。然后,我们通过应用条件 WHERE FLAG <> 0 OR SM = 0
: 排除标志为 0 并且总数大于 0 的行
SELECT userId, TRIM(
TRAILING ',' FROM (
XMLAGG(TRIM(COALESCE(discountCode , -1) || '') ) (VARCHAR(1000))
) AS discounts
FROM (
SELECT userId,
discountCode,
FLAG,
SUM(FLAG) OVER (PARTITION BY userId ) AS SM
FROM mytable
) as s
WHERE FLAG <> 0 OR SM = 0
GROUP BY userId;