Sql 如何使此联合查询更有效?

Sql 如何使此联合查询更有效?,sql,union,advantage-database-server,Sql,Union,Advantage Database Server,我使用联合联接创建了下面的SQL查询 如您所见,我用稍微不同的条件查询了同一个表2次。如果TYP是A,那么它就是报价。如果TYP为N,AB为true,那么它是一个顺序 整件事都起作用了。但我猜有一个更优雅的方法来做这个?我希望你能告诉我那条路是什么!:) 谢谢。 (顺便说一句,如果有什么不同,请使用advantage sql) 我猜想您只需要条件聚合: SELECT DATUM as report_month, REGION as region, count(DISTINCT NU

我使用联合联接创建了下面的SQL查询

如您所见,我用稍微不同的条件查询了同一个表2次。如果TYP是A,那么它就是报价。如果TYP为N,AB为true,那么它是一个顺序

整件事都起作用了。但我猜有一个更优雅的方法来做这个?我希望你能告诉我那条路是什么!:)

谢谢。 (顺便说一句,如果有什么不同,请使用advantage sql)


我猜想您只需要条件聚合:

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 WHEN typ = 'A' THEN 'Offer' ELSE 'Order' END)

(1) 用您正在使用的数据库标记您的问题。(2) 对所有列引用进行限定,以便清楚地知道您的查询在做什么。(3) 指定更好的表名。或者两个子查询真的在同一个表上进行自联接吗?嗨,戈登!1) -完成。2) 不确定要在这里添加什么,希望事情是清楚的?3) 完成后,更新了连接。我编辑了真实查询中的名称,以使其更具可读性。希望我没有让事情变得更糟。我的问题更多的是方向>例如,这是案例查询可以管理的吗。但我不能把我的头绕在那上面…谢谢戈登,它成功了!非常好,非常简单:)
(CASE WHEN typ = 'A' THEN 'Offer' ELSE 'Order' END)