使用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。希望能有所帮助。