首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MC Access:创建始终返回值的选择查询

MC Access:创建始终返回值的选择查询
EN

Stack Overflow用户
提问于 2016-09-02 09:09:37
回答 3查看 298关注 0票数 1

日安!我希望有人能帮我。下面我写下了我的结构和问题。我有这个发票明细表:发票明细表

代码语言:javascript
复制
 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查询,以获得以下值:

所需的查询结果:

代码语言:javascript
复制
 Invoice | SumofVAT 6% | SumofVAT 21% | 
 ------- | ------------|--------------|
 0001    |   €6        |     € 63     | 

查询之后,我可以使用更新查询将这些数据写入我的发票表:

代码语言:javascript
复制
 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版本:

代码语言:javascript
复制
 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%的产品(或者相反的情况),查询结果将为空。

EN

回答 3

Stack Overflow用户

发布于 2016-09-02 09:36:35

当然不是你期望的答案,我会得到一些反对票,但我们走吧:

将这些东西写入您的发票表是错误的,:它违反了关系设计的规范化原则,并引入了传递的依赖性。

除非你有客观的理由去淡化,否则不要这么做。

此外,如果设计正确,您的发票记录必须在InvoiceDetails之前创建,否则无法实现引用完整性。

我强烈建议你多读一些关于关系数据库设计与规范化的文章。

作为一个非常简单的规则:除非您出于历史原因需要重新计算,否则不要存储可以重新计算的内容(但在这里,请将纳税历史记录保存在详细信息中)

要计算你的增值税总额,你可以这样做:

代码语言:javascript
复制
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; 

或者使用交叉表查询:

代码语言:javascript
复制
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;
票数 2
EN

Stack Overflow用户

发布于 2016-09-02 10:46:58

你可以试试这个。我亲自测试过它,我想它能给你带来预期的结果。

代码语言:javascript
复制
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

我不知道这样做是不是正确的做法,但就我而言,它做的是应该做的和上面描述的。

编辑:这里是我从示例中创建的数据表,结果是截图

结果

票数 0
EN

Stack Overflow用户

发布于 2016-09-02 15:34:40

要获得可能包含Null的值的求和,只需替换:

在查询中使用带有[Value_that_may_be_Null]Nz([Value_that_may_be_Null],0) (在图形查询设计器和Access SQL中都可以使用)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39288565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档