MC Access:创建始终返回值的Select查询

时间:2016-09-02 09:09:38

标签: sql ms-access if-statement select

美好的一天!我希望有一个人可以帮助我。下面我写下了我的结构和问题。 我有这张发票详情表: 发票明细表

 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%QUERY的图片:(21%相同,但标准为' 21')

query of 6%

SQL VERSION:

 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%(或相反)的产品,查询结果是否为空。

3 个答案:

答案 0 :(得分:2)

肯定不是你期望的答案,我会得到一些反对票,但让我们走吧:
将这些内容写入您的发票表是错误的:它违反了规范化的关系设计原则,并引入了传递依赖性。

除非你有客观理由反规范化,否则不要这样做。

此外,如果设计正确,则必须在 InvoiceDetails 之前创建 Invoice 记录,否则无法实现参照完整性。

我强烈建议你阅读relational database design and normalization

作为一个非常简化的规则:不存储可以重新计算的内容,除非您出于历史原因需要它(但在此处您将税务历史保留在详细信息中)

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

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;

答案 1 :(得分:0)

你可以试试这个。我自己测试了它,我认为它可以获得预期的结果。

<ul class="navigation">
					<li class="navigation-items active" sub-nav="false" >
						<a data="main-link"><i class="material-icons">perm_identity</i> Option 1</a>
						<ul class="sub-nav animate-hide" ng-hide="!subNav.state">
							<li><a><i class="material-icons bullet">fiber_manual_record</i> Item 1</a></li>
						</ul>
					</li>
  </ul>

我不知道这样做是否是正确的做法,但据我所知,它会做上面应该做的事情。

编辑:以下是我根据您的示例创建的数据表 和结果截图

表格 enter image description here

<强>结果

enter image description here

答案 2 :(得分:0)

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

查询中包含[Value_that_may_be_Null]

Nz([Value_that_may_be_Null],0)(在图形查询设计器和Access SQL中都有效)