gpt4 book ai didi

mysql - 如果用 MySQL 连接的表为空,则求和不完成

转载 作者:行者123 更新时间:2023-11-29 03:18:37 25 4
gpt4 key购买 nike

我有以下表格结构并试图从这些表格中生成报告:

___计费数据

|--------|------------|---------|--------------|------------|
| BIL_Id | BIL_Date |BIL_Rate | BIL_Quantity | BIL_Status |
|--------|------------|---------|--------------|------------|
| 1 | 2018-03-01 | 105 | 1 | charged |
| 2 | 2018-03-01 | 15 | 2 | notcharged |
| 3 | 2018-03-01 | 5 | 1 | notcharged |
|--------|------------|---------|--------------|------------|

___营业税

|--------|--------------|------------|
| STX_Id | STX_TaxeName | STX_Amount |
|--------|--------------|------------|
| 8 | Tax 1 | 5.000 |
| 9 | Tax 2 | 15.000 |
|--------|--------------|------------|

STX_Amount 是一个百分比。

___适用税

|-----------|-----------|
| ATX_BILId | ATX_STXId |
|-----------|-----------|
| 1 | 8 |
| 1 | 9 |
|-----------|-----------|
  • ATX_BILId 是与 ___BillableDatas 链接的项目 ID。
  • ATX_STXId 是与 ___SalesTaxes 关联的税号。

我需要计算每天的项目总和 - 不含税 - 含税

所以像这样:

|------------------|---------------|------------|
| BIL_RateNonTaxed | BIL_RateTaxed | BIL_Status |
|------------------|---------------|------------|
| 105.00 | 126.00 | charged | <- Taxes #8, #9 applicable
| 35.00 | 35.00 | notcharged | <- No taxes here
|------------------|---------------|------------|

总数说明:

  • 105 = 105*1 --(总收费项目乘以数量)
  • 35 = (15*2)+5 --(未收费项目的总和乘以数量)
  • 126.00 = 105+(105*(5+15)/100)
  • 35.00 = 没有税,输入未税值。

我最后一次尝试是这个:

SELECT BIL_Status
, SUM(BIL_Rate*BIL_Quantity) BIL_RateNonTaxed
, IFNULL(SUM((BIL_Rate*BIL_Quantity)+(BIL_Rate*BIL_Quantity*total_sales_tax/100)), SUM(BIL_Rate*BIL_Quantity)) BIL_RateTaxed
FROM
( SELECT b.*
, SUM(t.STX_Amount) total_sales_tax
FROM ___BillableDatas b
LEFT JOIN ___ApplicableTaxes bt
ON bt.ATX_BILId = b.BIL_Id
LEFT JOIN ___SalesTaxes t
ON t.STX_Id = bt.ATX_STXId
GROUP
BY ATX_BILId
) x
GROUP
BY BIL_Status

只有当每个项目都有一个链接的税时(我的项目 #1 的情况),这个查询才有效。当项目没有关联税(项目 #2 和 #3)时,不会计算总和。

如果需要,请参阅此 SQLFiddle 以帮助您:
http://sqlfiddle.com/#!9/433a3f/2

链接的唯一错误是我应该使用 35 而不是 30

谢谢。

最佳答案

子查询按错误的事物分组。您正在按 ATX_BILId 分组,但我认为您真的想获得所有唯一的计费数据 bill_id。至少以下查询会返回您所期望的。唯一的区别是将“GROUP BY ATX_BILId”更改为“GROUP BY BIL_Id”

SELECT BIL_Status
, SUM(BIL_Rate*BIL_Quantity) BIL_RateNonTaxed
, IFNULL(SUM((BIL_Rate*BIL_Quantity)+(BIL_Rate*BIL_Quantity*total_sales_tax/100)), SUM(BIL_Rate*BIL_Quantity)) BIL_RateTaxed
FROM
( SELECT b.*
, SUM(t.STX_Amount) total_sales_tax
FROM ___BillableDatas b
LEFT JOIN ___ApplicableTaxes bt
ON bt.ATX_BILId = b.BIL_Id
LEFT JOIN ___SalesTaxes t
ON t.STX_Id = bt.ATX_STXId
GROUP
BY BIL_Id
) x
GROUP
BY BIL_Status

Link to SQL Fiddle

一般来说,当您对此类查询进行故障排除时,首先要做的是检查没有分组依据的返回行。运行以下查询时会更容易发现问题。

SELECT BIL_Status, 
BIL_Rate,
BIL_Quantity,
total_sales_tax
FROM
( SELECT b.*
, SUM(t.STX_Amount) total_sales_tax
FROM ___BillableDatas b
LEFT JOIN ___ApplicableTaxes bt
ON bt.ATX_BILId = b.BIL_Id
LEFT JOIN ___SalesTaxes t
ON t.STX_Id = bt.ATX_STXId
GROUP
BY ATX_BILId
) x

关于mysql - 如果用 MySQL 连接的表为空,则求和不完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49518345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com