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而不是空的空字段。看看查詢是否運行沒有。如果這是唯一的問題,我相信我們可以找到另一種方式來獲得零。 –