gpt4 book ai didi

Mysql与Case连接

转载 作者:行者123 更新时间:2023-11-29 07:19:50 26 4
gpt4 key购买 nike

我有两个表 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/

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