问题描述
如您所见,我查询了同一个表 2 次,但条件略有不同。如果TYP 是A,那么它就是一个Offer。如果 TYP 为 N 且 AB 为真,则为订单。
整个事情都奏效了。但我猜有一种更优雅的方式来做到这一点?我希望你能告诉我那是什么方式! :)
谢谢。 (顺便说一句,如果有区别,请使用优势 sql)
SELECT
DATUM as report_month,REGION as region,count(disTINCT NUMMER) as order_number,'Offer' as Type
from xxxxxxxxxxxx
left join xxxxxxxxx on KDNR = anotherDAB.KDNR
WHERE DATUM = '2021-02-16' AND TYP = 'A'
group by report_month,region
UNION
SELECT
DATUM as report_month,'Order' as Type
from xxxxxxxxxxx
left join xxxxxxxxx on KDNR = anotherDAB.KDNR
WHERE DATUM = '2021-02-16' AND TYP = 'N' AND AB = true
group by report_month,region
解决方法
我怀疑你只是想要条件聚合:
SELECT DATUM as report_month,REGION as region,count(DISTINCT NUMMER) as order_number,typ
from xxxxxxxxxxxx left join
xxxxxxxxx
on KDNR = KDNR
WHERE DATUM = '2021-02-16' AND
(TYP = 'A' OR TYP = 'N' AND AB = true)
GROUP BY report_month,region,type;
以上将 TYP
保留为 A
或 N
。如果需要字符串,可以使用 case
表达式:
(CASE WHEN typ = 'A' THEN 'Offer' ELSE 'Order' END)