【发布时间】:2021-04-16 10:23:18
【问题描述】:
我已经有几年没有写过 SQL 了,我觉得我遗漏了一些明显的东西,但我想不通!... 我在 PGADMIN 3 版本 1.22.2 中使用 SQL 查询窗口 我想从子查询中得到一个总和,以将一个值返回到我的主查询中;主查询基于过滤客户表,子查询基于特定时期销售的商品数量并满足多个条件。 这就是我的时刻:
select customerid, account, name,
-- Aluminium
(select sum(qty_inv) from ainvdet
where inv_account = CUST.account
and sales_year = 2021
and line_type = 'S'
and layout_section = 'D'
and qty_inv > 0
and ((product_group like 'IN%' and (part like '%H01%' or description like
'%H01%'))
or (part like 'DCA40%' or part like 'DCA60%' or part like 'D5432%' or part
like 'D5433%' or part like 'D5434%' or part like '220392%' or part like
'220360%' or part like 'D1106%' or part like 'DL510%' or part like
'DL508%' or part like 'DL509%' or part like 'DL507%' or part like
'DT693%' or part like 'DL608%' or part like 'DL205%' or part like
'SPET%' or part like 'XOET%')
or ((part like 'E24%' and (part like '%AL%' or part like '%AZ%')) or (part
like 'E25%' and (part like '%AL%' or part like '%AZ%')) or part like
'E70%' or part like 'E71%' or part like 'LANCIA%' or part like
'TC163%' or part like 'TC622%' or part like 'TE943%' or part like
'TE953%')
or ((part like '%H01%' or description like '%H01%') and product_group in
('LTTU','LTGR','LTPO')))) as "Aluminium",
-- Steel
(select sum(qty_inv) from ainvdet
where inv_account = CUST.account
and sales_year = 2021
and line_type = 'S'
and layout_section = 'D'
and qty_inv > 0
and ((product_group in ('MCXP','MCXX','MC4G'))
OR (product_group like 'IN%' and (part like '%PC3500%' OR part like
'%PC3600%' OR description like '%PC3500%' OR description like '%PC3600%'))
or (part like '%DH406%' or part like '%DH408%' or part like '%DH421%')
or (product_group = 'DRUD' and (part like '%PC3500%' or description like
'%PC3500%'))
or (product_group in ('LTPO','LTGR') and (part like '%NC3220%' or
description like '%NC3220%' or part like '%NC3225%' or description like
'%NC3225%'))
or (product_group = 'LTTU' and (part like '%NC3220%' or description like
'%NC3220%' or part like '%NC3225%' or description like '%NC3225%' or part
like '%NC3215%' or description like '%NC3215%' or part like '%YG3020%' or
description like '%YG3020%')))
) as "Steel"
from customer CUST
where userchk1 <> true AND userchk2 <> true AND userchk3 <> true AND
userchk4 <> true AND userchk5 <> true AND userchk6 <> true AND userchk7 <>
true AND userchk8 <> true AND userchk9 <> true AND userchk10 <> true
limit 5
我从客户表中获取各个字段,但子查询为所有客户返回相同的值。
我也尝试过使用 GROUP BY customerid 并得到相同的结果,如下所示:
(n.b. 限制只是为了让它在测试时运行得更快)
【问题讨论】:
-
请将您的查询编辑/格式化为一些可读的形式。 [我开始编辑,但对我来说太多了]
-
已编辑:希望 Wildplasser 读起来更好;抱歉,第一次发帖。
-
您的查询太大而无法处理。也许条件聚合可以简化它?
-
我不知道如何精简它或条件聚合是什么;如果它更具可读性,请随意删除很多“或”行。主要问题是为什么它不只返回特定于该客户的数据?
-
注意:聚合子查询看起来不同:
where customerid = CUST.customeri>where inv_account = CUST.account。这是故意的吗?
标签: postgresql subquery