如何使这个联合查询更有效?

问题描述

我已经使用 UNION 连接创建了下面的 sql 查询

如您所见,我查询了同一个表 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 保留为 AN。如果需要字符串,可以使用 case 表达式:

(CASE WHEN typ = 'A' THEN 'Offer' ELSE 'Order' END)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...