在MySQL中计算总额的增值税/税费-增值税税率取决于位置字段
我正试图从Wordpress/Woocommerce安装中的表在MySQL中创建一个报告,但这家商店的征税方式与Woocommerce的做法不同,因此我无法使用Woocommerce报告 计算时需要计算出20%的英国增值税税率,但前提是客户位于特定地点。因此,如果客户在“世界”中,税率为0%。如果客户在英国,税率为20%。但收费总额保持不变,因此出口利润高于本地销售利润 我从以下几点开始:在MySQL中计算总额的增值税/税费-增值税税率取决于位置字段,mysql,wordpress,woocommerce,Mysql,Wordpress,Woocommerce,我正试图从Wordpress/Woocommerce安装中的表在MySQL中创建一个报告,但这家商店的征税方式与Woocommerce的做法不同,因此我无法使用Woocommerce报告 计算时需要计算出20%的英国增值税税率,但前提是客户位于特定地点。因此,如果客户在“世界”中,税率为0%。如果客户在英国,税率为20%。但收费总额保持不变,因此出口利润高于本地销售利润 我从以下几点开始: SELECT TRIM(LEADING 'Order –' FROM post_tit
SELECT TRIM(LEADING 'Order –' FROM post_title) AS Date,
m1.meta_value AS _order_number,
m2.meta_value AS _Location,
m3.meta_value AS _order_total
FROM wp_posts
LEFT JOIN wp_postmeta AS m1 ON m1.post_id = wp_posts.ID AND m1.meta_key = '_order_number'
LEFT JOIN wp_postmeta AS m2 ON m2.post_id = wp_posts.ID AND m2.meta_key = '_shipping_method_title'
LEFT JOIN wp_postmeta AS m3 ON m3.post_id = wp_posts.ID AND m3.meta_key = '_order_total'
WHERE wp_posts.post_type = 'shop_order'
这给了我一张这样的桌子:
Date | Order no | Location | Order Total
May 2013 | 123 |World |1124.00
Jan 2013 | 124 |UK |163.00
到目前为止还不错。然后我试着加上一些金额来计算增值税的金额
SELECT TRIM(LEADING 'Order –' FROM post_title) AS Date,
m1.meta_value AS _order_number,
m2.meta_value AS _Location,
m3.meta_value AS _order_total,
SUM(m3.meta_value*20/120) AS _VAT,
SUM(m3.meta_value*100/120) AS _NET
FROM wp_posts
LEFT JOIN wp_postmeta AS m1 ON m1.post_id = wp_posts.ID AND m1.meta_key = '_order_number'
LEFT JOIN wp_postmeta AS m2 ON m2.post_id = wp_posts.ID AND m2.meta_key = '_shipping_method_title'
LEFT JOIN wp_postmeta AS m3 ON m3.post_id = wp_posts.ID AND m3.meta_key = '_order_total'
WHERE wp_posts.post_type = 'shop_order'
我想这会给我:
Date | Order no | Location | Order Total | VAT | NET
May 2013 | 123| World | 1124.00 | 187.33 | 1311.33
Jan 2013 | 124 | UK | 163.00 | 27.17 | 190.17
然后我可以继续尝试找出如何根据地点改变费率。
不幸的是,它似乎总结了一切,而不是给我一行一行的结果
1我搞砸了什么,把一切都加在一起了
2只有当_shipping_method_title=UK时,如何最好地应用增值税计算
3显然,这只在税率改变之前有效。我处理这一问题的最佳办法是在下次修改税率的时候限制此报告的日期,并为未来适用新税率的订单制作新报告吗?还是有更聪明的方法
我理解向客户收取统一费率并支付可变税是一种有点奇怪的方法,但我不想改变这一点,我只是负责提供报告:
编辑
多亏了Gordon,我已经解决了求和问题,现在我的查询如下所示,并生成了我期望的表布局,如上图所示:
SELECT TRIM(LEADING 'Order –' FROM post_title) AS Date,
m1.meta_value AS _order_number,
m2.meta_value AS _Location,
m3.meta_value AS _order_total,
SUM(m3.meta_value*20/120) AS _VAT,
SUM(m3.meta_value*100/120) AS _NET
FROM wp_posts
LEFT JOIN wp_postmeta AS m1 ON m1.post_id = wp_posts.ID AND m1.meta_key = '_order_number'
LEFT JOIN wp_postmeta AS m2 ON m2.post_id = wp_posts.ID AND m2.meta_key = '_shipping_method_title'
LEFT JOIN wp_postmeta AS m3 ON m3.post_id = wp_posts.ID AND m3.meta_key = '_order_total'
WHERE wp_posts.post_type = 'shop_order'
GROUP BY wp_posts.ID
但我仍然不确定如何根据location字段中的值更改乘数。这是可能的,还是我找错树了
编辑2
我已经算出了一个部分解决方案——我用一个案例来代替求和线,给我一个增值税的计算值
CASE
when m2.meta_value = 'World Delivery' then 0
when m2.meta_value = 'UK Delivery' then (m3.meta_value*20/120)
when m2.meta_value = 'European Delivery' then (m3.meta_value*20/120)
END AS _VAT
不幸的是,我不能重复“净值价格-增值税”的案例陈述,因为它与增值税的案例相同,所以会产生错误
我想做一些像
SUM(_order_total-_VAT) AS _NET
但*_订单_总额*和*_增值税*不被视为可根据计算得出的列
最终编辑
再次感谢Gordon,我的最后一个查询看起来是这样的,我只是添加了它,以防其他人发现它有帮助。此查询与Wordpress导出和报告Wordpress插件配合使用,因此可以快速集成到Wordpress管理中并导出到Excel,这很好
SELECT TRIM(LEADING 'Order –' FROM post_title) AS Date,
m1.meta_value AS _order_number,
m2.meta_value AS _Customer_Location,
m3.meta_value AS _order_total,
ROUND(SUM(case when m2.meta_value = 'World Delivery' then 0 else m3.meta_value*20/120 end),2) AS _VAT,
ROUND(SUM(case when m2.meta_value = 'World Delivery' then m3.meta_value else m3.meta_value*100/120 end),2) AS _NET
FROM wp_posts
LEFT JOIN wp_postmeta AS m1 ON m1.post_id = wp_posts.ID AND m1.meta_key = '_order_number'
LEFT JOIN wp_postmeta AS m2 ON m2.post_id = wp_posts.ID AND m2.meta_key = '_shipping_method_title'
LEFT JOIN wp_postmeta AS m3 ON m3.post_id = wp_posts.ID AND m3.meta_key = '_order_total'
WHERE wp_posts.post_type = 'shop_order' AND wp_comments.comment_post_id = wp_posts.ID AND wp_comments.comment_content="Order status changed from processing to completed."
GROUP BY wp_posts.ID
之所以只得到一行,是因为sum函数使其成为聚合查询。但是,你没有一个小组。我认为按postid分组修复了这一问题,并对select进行了一些其他调整: 这种类型的数据很难适应。单个记录的所有数据在多行中分割 要根据位置更改乘数,请使用where子句。以下是一个例子:
SUM(case when location = 'UK' then 0 else m3.meta_value*20/120 end) AS _VAT,
SUM(case when location = 'UK' then m3.meta_value else m3.meta_value*100/120 end) AS _NET
之所以只得到一行,是因为sum函数使其成为聚合查询。但是,你没有一个小组。我认为按postid分组修复了这一问题,并对select进行了一些其他调整: 这种类型的数据很难适应。单个记录的所有数据在多行中分割 要根据位置更改乘数,请使用where子句。以下是一个例子:
SUM(case when location = 'UK' then 0 else m3.meta_value*20/120 end) AS _VAT,
SUM(case when location = 'UK' then m3.meta_value else m3.meta_value*100/120 end) AS _NET
哦,谢谢戈登-我添加了wp_posts.ID的组,它整理了我的表,所以它看起来和我预期的一样,呸。有没有想过如何根据位置改变乘法器,或者期望在MySQL中这样做是愚蠢的?你可以在求和中这样做!当然出于某种原因,我试图把这笔钱放在箱子里,但这行不通。再次感谢您的帮助,我可以看出我需要更多地练习案例。哦,谢谢戈登-我添加了wp_posts.ID的GROUP,它整理了我的表格,所以它看起来像我预期的那样,呸。有没有想过如何根据位置改变乘法器,或者期望在MySQL中这样做是愚蠢的?你可以在求和中这样做!当然出于某种原因,我试图把这笔钱放在箱子里,但这行不通。再次感谢您的帮助,我可以看出我需要更多的案例练习。