我有两个表 sales 和 sale_taxes
表:销售额
sale_id | sale_cost | sale_discount | sale_tax | sale_total
-------------------------------------------------------------
131 | 30 | 10 | 3 | 23
表:sale_taxes,存储税收细目
sale_tax_id | sale_id | tax_id | tax_percent | tax_amount
-------------------------------------------------
1211 | 131 | 1 | 10 | 2
1332 | 131 | 2 | 5 | 1
其中,tax_id 1 代表增值税,2 代表服务税。
我需要有关获取结果的查询帮助
sale_id | sale_cost | sale_discount | sale_tax | sale_total | VAT | Service Tax
---------------------------------------------------------------------------------
131 | 30 | 10 | 3 | 23 | 2 | 1
最佳答案
假设我正确理解你的问题,有几个选项可以做到这一点。一种是将表多次连接
:
select s.sale_id, s.sale_cost, s.sale_discount, s.sale_tax, s.sale_total,
st1.tax_amount as vat,
st2.tax_amount as service_tax
from sales s
left join sales_taxes st1 on s.sale_id = st1.sale_id and st1.tax_id = 1
left join sales_taxes st2 on s.sale_id = st2.sale_id and st2.tax_id = 2
如果数据可能存在也可能不存在,请使用外连接
。如果您知道两条记录都存在,则可以使用内部联接
。
这是使用条件聚合
的替代方法:
select s.sale_id, s.sale_cost, s.sale_discount, s.sale_tax, s.sale_total,
max(case when st.tax_id = 1 then st.tax_amount end) as vat,
max(case when st.tax_id = 2 then st.tax_amount end) as service_tax
from sales s
left join sales_taxes st on s.sale_id = st.sale_id
group by s.sale_id
但我相信第一种方法会更有效。
关于Mysql与Case连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36583021/