日安!我希望有人能帮我。下面我写下了我的结构和问题。我有这个发票明细表:发票明细表
Invoice | Detail | Product | Price | VAT % | VAT € | TOTAL |
------- | -------|---------|-------|-------|-------|-------|
0001 | 1 | X | € 100 | 21 | € 21 | € 121 |
0001 | 2 | X | € 200 | 21 | € 42 | € 242 |
0001 | 3 | X | € 100 | 6 | € 6 | € 106 |现在,我想要进行一个select查询,以获得以下值:
所需的查询结果:
Invoice | SumofVAT 6% | SumofVAT 21% |
------- | ------------|--------------|
0001 | €6 | € 63 | 查询之后,我可以使用更新查询将这些数据写入我的发票表:
Invoice | Client | Date | Price | VAT 6% | VAT 21% |
------- | -------|---------|-------|--------|---------|
0001 | B10 |01-01-01 | € 469 | € 6 | € 63 |我试过很多东西。我遇到的问题是,当一个特定的产品只有一个或多个产品的1种类型的增值税%。然后查询返回Null。
我想我应该:
1)查询以欧元计算xxxx号发票的总增值税6% (退回发票号和总增值税6%)
2)查询以欧元计算xxxx号发票的21%增值税总额(退回发票号和总增值税21%)
( 3)如果其中一个查询返回Null,它应该返回发票号和增值税总数( 0,00 )
希望有人能帮我这个忙。
6%查询的图像:(21%相等,但标准为“21”)

SQL版本:
SELECT FactuurDetails.Factuurnummer, FactuurDetails.[BTW in %],Sum(FactuurDetails.[BTW in EURO]) AS [SumOfBTW in EURO]
FROM FactuurDetails
GROUP BY FactuurDetails.Factuurnummer, FactuurDetails.[BTW in %]
HAVING (((FactuurDetails.Factuurnummer)=[Forms]![Facturen]!在这里,您可以看到,如果发票中只有21%的产品(或者相反的情况),查询结果将为空。
发布于 2016-09-02 09:36:35
当然不是你期望的答案,我会得到一些反对票,但我们走吧:
将这些东西写入您的发票表是错误的,:它违反了关系设计的规范化原则,并引入了传递的依赖性。
除非你有客观的理由去淡化,否则不要这么做。
此外,如果设计正确,您的发票记录必须在InvoiceDetails之前创建,否则无法实现引用完整性。
我强烈建议你多读一些关于关系数据库设计与规范化的文章。
作为一个非常简单的规则:除非您出于历史原因需要重新计算,否则不要存储可以重新计算的内容(但在这里,请将纳税历史记录保存在详细信息中)
要计算你的增值税总额,你可以这样做:
SELECT Invoices.Id, Details.VatRate, Sum([Quant]*[unitprice]*[VatRate]) AS VatAmount
FROM Invoices LEFT JOIN Details ON Invoices.Id = Details.InvId
GROUP BY Invoices.Id, Details.VatRate; 或者使用交叉表查询:
TRANSFORM Sum([Quant]*[unitprice]*[VatRate]) AS VatAmount
SELECT Invoices.Id
FROM Invoices LEFT JOIN Details ON Invoices.Id = Details.InvId
GROUP BY Invoices.Id
PIVOT Details.VatRate;发布于 2016-09-02 10:46:58
你可以试试这个。我亲自测试过它,我想它能给你带来预期的结果。
SELECT I1 AS Invoice, six.t AS VAT_6, twentyone.t AS VAT_21
FROM
(SELECT Invoice AS I1, IIF(ISNULL(sum(VAT)),0,sum(VAT)) AS t
FROM Table1 WHERE [vat%] = 6 GROUP BY Invoice) AS six
RIGHT JOIN
(SELECT Invoice AS I2, IIF(ISNULL(sum(VAT)),0,sum(VAT)) AS t
FROM Table1 WHERE [vat%] = 21 GROUP BY Invoice) AS twentyone ON six.I1 = twentyone.I2
UNION
SELECT I1 AS Invoice, six.t AS VAT_6, twentyone.t AS VAT_21
FROM
(SELECT Invoice AS I1, IIF(ISNULL(sum(VAT)),0,sum(VAT)) AS t
FROM Table1 WHERE [vat%] = 6 GROUP BY Invoice) AS six
LEFT JOIN
(SELECT Invoice AS I2, IIF(ISNULL(sum(VAT)),0,sum(VAT)) AS t
FROM Table1 WHERE [vat%] = 21 GROUP BY Invoice) AS twentyone ON six.I1 = twentyone.I2我不知道这样做是不是正确的做法,但就我而言,它做的是应该做的和上面描述的。
编辑:这里是我从示例中创建的数据表,结果是截图
表

结果

发布于 2016-09-02 15:34:40
要获得可能包含Null的值的求和,只需替换:
在查询中使用带有[Value_that_may_be_Null]的Nz([Value_that_may_be_Null],0) (在图形查询设计器和Access SQL中都可以使用)
https://stackoverflow.com/questions/39288565
复制相似问题