我有两张桌子销售和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
答案 0 :(得分:2)
假设我正确理解您的问题,有几个选项可以做到这一点。一个是join
表自身多次:
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
如果数据可能存在,也可能不存在,请使用outer join
。如果您知道两个记录都存在,则可以使用inner join
代替。
以下是使用conditional aggregation
的替代方法:
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
但我相信第一种方法会更有效率。