http://sqlfiddle.com/#!2/d005f/16/0
我修改的表名的SQL小提琴。我想我把它们改回正确....
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
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的工作,添加和/数到一个可行的查询)
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
而只保留要去看看是什么问题...慢慢积聚到你想要查询使用。一般错误意味着我们试图做一些数据库不支持的事情。使用不存在的函数可能会是一个语法错误。
您好,我真的很感谢您花时间看我的查询。我已经尝试过你的建议。我要么得到一个语法错误或一般的ODBC错误。我对你的例子进行了一些改变,发现MSQuery似乎不喜欢Coalesce功能,在我发现有一个替代ISNULL,但它仍然不喜欢(Syntax Error)。你给的第二个例子返回了“General ODBC Error”,如果我从第二个例子中取出Where子句,它没有错误地运行,但当然只返回一行。 –
您是否认为我正在尝试使用MSQuery(将数据加载到Excel中)实现一些不可能的事情。虽然它看起来确实是一个相当基本的要求,所以我认为MSQuery会取决于它?再次感谢,我真的很感谢人们给予的任何帮助。 –
告诉我确切的错误是什么,请...我不认为这是不可能的,MS办公室的东西有点奇怪,但总是有工作。不过,我没有实际测试任何实际环境的能力。我用'coalesce'给我一个0而不是空的空字段。看看查询是否运行没有。如果这是唯一的问题,我相信我们可以找到另一种方式来获得零。 –