使用mySQL列出包含税务信息的项目

使用mySQL列出包含税务信息的项目,mysql,Mysql,我有以下表格结构,并试图根据这些表格制作报告: ___可计费数据 |--------|------------|----------|----------|----------|--------------| | BIL_Id | BIL_Date | BIL_Type | BIL_Item | BIL_Rate | BIL_Quantity | |--------|------------|----------|----------|----------|--------------| |

我有以下表格结构,并试图根据这些表格制作报告:

___可计费数据

|--------|------------|----------|----------|----------|--------------|
| BIL_Id | BIL_Date   | BIL_Type | BIL_Item | BIL_Rate | BIL_Quantity |
|--------|------------|----------|----------|----------|--------------|
|      1 | 2018-03-01 |    Night |        0 |      105 |            1 |
|      2 | 2018-03-02 |    Night |        0 |      105 |            1 |
|      3 | 2018-03-01 |     Item |       30 |       15 |            2 |
|      4 | 2018-03-01 |     Item |       31 |       21 |            1 |
|      5 | 2018-03-02 |     Item |       30 |       15 |            2 |
|      6 | 2018-03-02 |     Item |       31 |       21 |            1 |
|--------|------------|----------|----------|----------|--------------|
___销售税

|--------|--------------|------------|
| STX_Id | STX_TaxeName | STX_Amount |
|--------|--------------|------------|
|      8 |        Tax 1 |      5.000 |
|      9 |        Tax 2 |      5.000 |
|     10 |        Tax 3 |     19.975 |
|--------|--------------|------------|
STX_金额是一个百分比

___适用税

|-----------|-----------|
| ATX_INVId | ATX_STXId |
|-----------|-----------|
|        30 |         9 |
|        30 |        10 |
|        31 |         9 |
|-----------|-----------|
  • ATX_INVId是与库存的物料ID链接
  • ATX_STXId是与uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu salesax的tax ID链接
___存货

|--------|-----------|----------|
| INV_Id | INV_Name  | INV_Rate |
|--------|-----------|----------|
|     30 | Breakfast |    15.00 |
|     31 |   Paid-TV |    21.00 |
|     32 |      Wine |    19.00 |
|--------|-----------|----------|

我需要列出如下项目:

|--------|------------|----------|----------|------------|----------|--------------|---------------------|---------------------|
| BIL_Id | BIL_Date   | BIL_Type | INV_Name | BIL_RateId | BIL_Rate | BIL_Quantity | ApplicableTaxesRate | ApplicableTaxesName |
|--------|------------|----------|----------|------------|----------|--------------|---------------------|---------------------|
|      1 | 2018-03-01 |    Night |     NULL |          0 |   105.00 |            1 |  5.000,19.975,5.000 |   Tax 1,Tax 3,Tax 2 |
|      2 | 2018-03-02 |    Night |     NULL |          0 |   105.00 |            1 |  19.975,5.000,5.000 |   Tax 3,Tax 2,Tax 1 |
|      3 | 2018-03-01 |     Item |     NULL |          0 |    15.00 |            3 |        19.975,5.000 |         Tax 3,Tax 2 |
|      4 | 2018-03-01 |     Item |     NULL |          0 |    21.00 |            1 |                   0 |                   0 |
|      5 | 2018-03-02 |     Item |     NULL |          0 |    15.00 |            2 |        5.000,19.975 |         Tax 2,Tax 3 |
|      6 | 2018-03-02 |     Item |     NULL |          0 |    21.00 |            1 |                   0 |                   0 |
|--------|------------|----------|----------|------------|----------|--------------|---------------------|---------------------|

关于总数的说明:

  • 5.000,5.000,19.975=以逗号分隔的项目税额
  • 税1、税2、税3=项目的税名以逗号分隔

我最后一次尝试是:

SELECT BIL_Id
    , BIL_Date
    , BIL_Type
    , BIL_RateId
    , BIL_Rate
    , BIL_Quantity
    , GROUP_CONCAT(COALESCE(STX_Amount, "0")) AS ApplicableTaxesRate
    , GROUP_CONCAT(COALESCE(STX_TaxeName, "0")) AS ApplicableTaxesName
FROM ___BillableDatas
LEFT JOIN ___Inventory
    ON ___BillableDatas.BIL_Item=___Inventory.INV_Id
LEFT JOIN ___SalesTaxes
    ON FIND_IN_SET(STX_Id, BIL_ApplicableTaxes) > 0
GROUP BY BIL_Id
ORDER BY BIL_Date ASC
如果需要,请查看此SQLFiddle以帮助您:


谢谢。

作为答案发布,因为评论无法格式化

SELECT BIL_Id
    , BIL_Date
    , BIL_Type
    , BIL_RateId
    , BIL_Rate
    , BIL_Quantity
    , GROUP_CONCAT(COALESCE(STX_Amount, "0")) AS ApplicableTaxesRate
    , GROUP_CONCAT(COALESCE(STX_TaxeName, "0")) AS ApplicableTaxesName 
FROM ___BillableDatas BD 
LEFT JOIN ___ApplicableTaxesInventory AI
    ON FIND_IN_SET(AI.ATX_INVId, BD.BIL_Item)
LEFT OUTER JOIN ___SalesTaxes ST
    ON AI.ATX_STXId = ST.STX_Id
GROUP BY BIL_Id
ORDER BY BIL_Date ASC
此查询似乎给出了您预期的结果,但数据不匹配,因为示例数据与问题不匹配。如果这不是你所期望的,请告诉我


更新:只需删除
WHERE-BIL\u BookingId='1'
。如何在查询中使用表中不存在的列
BIL_可适用税收
BIL_状态
?@clinomaniac:首先,感谢您的帮助
BIL_applicatabletaxes
是我获取所有税款的别名
BIL_Status
您可以将其删除,因为在本例中它不是强制性的。代码现在已更新。您如何确定适用于每个账单行的税款?@clinomaniac,因为在账单数据上,
bill\u项目
链接到了
ATX\u INVId
中的applicatabletaxesinventory。而
ATX\u STXId
则链接到
STX\u Id
in\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuu salesax。希望能有所帮助。