我的会计程序存储在DBF中的数据(我知道,很老)。我试图通过C#(VFPOLEDB)获取代理的未收集发票清单:client_id,发票日期,unpayed_amount(全部或部分),invoice_nr - 用于将来在Android平板电脑sqlite中插入。信息存储如下(摘要):
partners.dbf - partner catalog - client_id, agent
invoices.dbf - invoice table - invoice nr, date, client_id, amount
payments.dbf - payments - invoice nr, amount_payed
我尝试使用查询:
SELECT
a.invoice_nr,
a.client_id,
a.date,
ROUND(a.amount - SUM(b.amount_payed), 2) as due
from
invoices a
LEFT JOIN payments b
on a.invoice_nr = b.invoice_nr
WHERE
a.client_id IN ( SELECT client_id
FROM partners
WHERE agent= 'Some agent')
GROUP BY
a.invoice_nr,
a.client_id,
a.date,
a.amount
having
due != 0
有趣的是,在SQLite中运行正常。如果我尝试仅按a.invoice_nr分组,则会抛出Group By Clause无效的错误(我读到Group By必须包含select子句中的所有变量)
有人可以帮我调整此查询以满足我的需求吗?谢谢。
答案 0 :(得分:0)
Foxpro中的引擎行为可能要求您在组中包含所有非聚合字段。您可以将该设置更改为引擎行为80或70.但为了简化,因为您知道给定的发票始终是相同的客户和日期,您可以更改为..
select
a.invoice_nr,
max( a.client_id ) client_id,
max( a.date ) date, ... rest of query
由于发票的客户和日期相同,因此对每个发票应用MAX()将始终为所述发票提供相同的值。
答案 1 :(得分:0)
找到答案:
Dim duplicates = input.GroupBy(Function(i) i.Number) _
.Where(Function(x) x.Count() > 1) _
.Any()