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;
你几乎是对的。for 的条件type='trade'
需要出现在join
语句中,而不是出现在where
. left outer join
表示您想要所有行,dis.csv
并且只需要vau.csv
它们匹配的行。我花了一分钟才弄清楚,但是type='trade'
在 where 导致一些数据丢失。
你也可以这样想:
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
继续下去看看问题是什么......慢慢建立你想要使用的查询。一般错误意味着我们正在尝试做一些数据库不支持的事情。使用不存在的函数可能会出现语法错误。