【问题标题】:Showing taxes per invoice items from database显示数据库中每个发票项目的税金
【发布时间】:2015-03-15 19:11:27
【问题描述】:

我在从数据库中获取税值时遇到问题。我会尽量简化。

第一个表是

Invoices
(
    `Id`, 
    `Date`, 
    `InvoiceNumber`,
    `Total`
)

第二张桌子是

`InvoiceItems` 
(
    `Id`, 
    `Total`, 
    `TotalWithoutTax`, 
    `TotalTax`,
    `InvoiceId`
)

InvoiceId 是上表 InvoicesId 列的外键

第三张桌子是

`InvoiceItemTaxes` 
(

    `Id`, 
    `TaxAmmount`, 
    `InvoiceItemId`, 
    `TaxId`
)

第四张表

`Taxes` 
(
    `Id`,
    `Value`
)

最后一张表包含三种税,比如说 3%、10% 和 15%。

我正在尝试获得类似的东西 - 带有 InvoiceNumberTotal without taxesTax1Tax2Tax3Total with taxes 列的表格。

我尝试了很多不同的方法,但我根本无法获得每张发票的税额。最终结果将是一个表格,我可以在其中看到每张带有指定税额的发票(每个发票项目的每个税额的总和)。

【问题讨论】:

  • 样本数据和期望的结果会让这更容易理解。也许您正在寻找条件聚合(casemax)来组合 Taxes 表中的多行,以获得输出中的多列。 . .
  • 好吧...假设您创建了包含四个项目的发票 - 铅笔(3% 税,1 美元不含税),PostIt(3% 税,2 美元),笔记本(10%,5 美元) ) 和包装纸 (15%, 1$)。它们每个都在InvoiceItems 表中,具有各自的值。此外,您将在InvoiceItemsTaxes 中将它们中的每一个都包含在仅税额中。最后,您将在Invoices 中有一个条目 - 发票号。 1,总共9美元不含税)。我正在尝试获取所有发票的清单,其中指定了每种税率的缴纳税额和总额(不含税)。在这个例子中 SQL 查询将如何进行?

标签: mysql sql


【解决方案1】:

如果我理解正确,您可以使用sumcase 的条件聚合来获得按税组的细分:

select i.id, i.invoicenumber, i.total as pretaxtotal,
    sum(case when t.value = 3 then iit.TaxAmmount end) taxes_3,
    sum(case when t.value = 10 then iit.TaxAmmount end) taxes_10,
    sum(case when t.value = 15 then iit.TaxAmmount end) taxes_15,
    sum(ii.Total) as overalltotal
from invoices i 
   join InvoiceItems ii on i.id = ii.invoiceid
   join InvoiceItemTaxes iit on ii.id = iit.InvoiceItemId
   join Taxes t on t.id = iit.taxid
group by i.id, i.invoicenumber, i.total

有些字段可能有点偏离——示例数据不完整。

【讨论】:

    猜你喜欢
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    • 2015-05-07
    • 2015-04-26
    • 2013-06-09
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多