问题如下
WITH notes AS (
SELECT 891090 Order_ID, False customer_billing, false commander, true agent
UNION ALL
SELECT 891091, false, true, true
UNION ALL
SELECT 891091, true, false, false)
SELECT
n.order_id,
string_Agg(distinct CASE
WHEN n.customer_billing = TRUE THEN 'AR (Customer Billing)'
WHEN n.commander = TRUE THEN 'AP (Commander)'
WHEN n.agent = TRUE THEN 'AP (Agent)'
ELSE NULL
END,', ') AS finance
FROM notes n
WHERE
n.order_id = 891091 AND (n.customer_billing = TRUE or n.commander = TRUE or n.agent = TRUE)
GROUP BY ORDER_ID
如您所见,有两条订单id为891091的记录.
- 第一条891091记录将
commander
和agent
设置为真 - 第二条891091记录有
customer_billing
条为真
由于使用switch 盒,它只考虑第一个真值,返回commander
,不考虑agent
.
因此,输出变为
order_id finance
891091 AP (Commander), AR (Customer Billing)
我需要考虑记录中的所有真值,以便输出
order_id finance
891091 AP (Commander), AP (Agent), AR (Customer Billing)
我最初的 idea 是使用if语句而不是case语句可以解决这个问题.我不知道如何在string_agg函数中实现这一点
如何做到这一点?
编辑1:
下面给出的答案几乎可以.问题是distinct个逗号不是分开的
这是最新的小提琴