http://sqlfiddle.com/#!2/d005f/16/0
我修改了 sql fiddle 的表名。我想我把它们改回来了......
select dis.diswording,
count(vau.item) as item_count,
coalesce(sum(vau.value),0) as value_sum
from dis.csv as dis
left join vau.csv as vau
on dis.id = vau.id and vau.type = 'trade'
group by dis.diswording;
你几乎是对的。 type='trade' 的条件需要出现在 join 语句中,而不是出现在 where 中。 left outer join 表示您想要来自dis.csv 的所有行,并且只需要来自vau.csv 的匹配行。我花了一分钟才弄清楚,但是在其中有 type='trade' 会导致一些数据丢失。
你也可以这样想:
select dis.diswording,
count(vau.item) as item_count,
coalesce(sum(vau.value),0) as value_sum
from dis.csv as dis
left join (select *
from vau.csv
where vau.type = 'trade') as vau
on dis.id = vau.id
group by dis.diswording;
编辑:
代替coalesce(sum(vau.value),0) as value_sum 你可以试试:
Nz(sum(vau.value),0) as value_sum
-
请告诉我您的确切和完整错误是什么(您可以更新问题)。有几种方法可以重新编写查询,因此我确信可以将其切换为可接受的内容。 Jet/Excel/Office 有点奇怪和敏感。在将它们提供给您之前,我没有任何方法可以在您的实际环境中测试这些查询。
我不确定数据库查询的哪一部分存在问题。这也有效:
尝试用 Nz 替换 coalesce
select dis.diswording,
sum(case when vau.type='trade'
then 1 else 0 end) as item_count,
coalesce(sum(case when vau.type='trade'
then vau.value
else 0 end),0) as value_sum
from dis.csv as dis
left join vau.csv as vau
on dis.id = vau.id
group by dis.diswording;
您能否尝试对其进行故障排除,看看它给出了一般错误的查询部分?只需通过删除部分使查询尽可能简单......然后添加内容。看看你是否可以隔离问题。
-
这会运行吗? (试试它最基本的形式)
select dis.id, dis.diswording,
vau.item, vau.value, vau.type
from dis.csv as dis
left join vau.csv as vau
on dis.id = vau.id
-
这会运行吗? (尝试在加入中过滤交易)
select dis.id, dis.diswording,
vau.item, vau.value, vau.type
from dis.csv as dis
left join vau.csv as vau
on dis.id = vau.id and vau.type='trade'
-
这会运行吗? (尝试嵌套选择)
select dis.id, dis.diswording,
vau.item, vau.value, vau.type
from dis.csv as dis
left join (select * from vau.csv where type='trade') as vau
on dis.id = vau.id
-
这会运行吗? (假设 #1 有效,将 sum/count 添加到有效的查询中)
select dis.id, dis.diswording,
count(vau.item) as item_count,
sum(vau.value) as vaue_sum
from dis.csv as dis
left join vau.csv as vau
on dis.id = vau.id
group by dis.id, dis.diswording
然后继续下去,看看问题出在哪里......慢慢建立您想要使用的查询。一般错误意味着我们正在尝试做一些数据库不支持的事情。使用不存在的函数可能会出现语法错误。