MySQL でレポートを作成しようとしています (Wordpress/Woocommerce インストールのテーブルからですが、このショップの課税方法は Woocommerce の方法とは異なるため、Woocommerce レポートを使用できません。)
計算では、合計から 20% の税率 (英国の VAT) を算出する必要がありますが、これは顧客が特定の場所にいる場合に限られます。したがって、顧客が「世界」にいる場合、税率は 0% です。顧客が英国にいる場合、税率は 20% です。しかし、請求される合計額は同じままです (したがって、国内での販売よりも輸出の方が多くの利益が得られます!)
私はから始めました:
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
ここまでは順調ですね。そこで、いくつかの SUM を追加して VAT の額を算出しようとしました。
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 の場合にのみ VAT 計算を適用する最善の方法についてのアイデアはありますか?
3) 明らかに、これは税率が変わるまでしか機能しません。税率が次に修正される時点でこのレポートを日付に制限し、新しい税率が適用される将来の注文について新しいレポートを作成するのが最善の策ですか? それとももっと賢い方法がありますか?
顧客に定額を請求し、変動税を支払うというのは少し奇抜なアプローチですが、それを変更することはできません。レポートを提供することだけを任されているだけです。:-(
EDIT Gordon のおかげで、SUM の問題を解決できました。これで、クエリは次のようになり、上記のように、期待したテーブル レイアウトが生成されます。
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
しかし、場所フィールドの値に基づいて乗数を変更する方法がまだわかりません。それは可能ですか、それともここで間違ったツリーを吠えていますか?
編集2
私は部分的な解決策を考え出しました - SUM 行の代わりに、CASE を使用して VAT の計算値を取得しました。
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
残念ながら、_NET 値 (price - VAT は VAT と同じ CASE であるため、CASE ステートメントを繰り返すことはできず、エラーが発生します。
私は何かをしたい
SUM(_order_total-_VAT) AS _NET
ただし、*_order_total* と *_VAT* は計算可能な列として認識されません。
最終編集 再びゴードンに感謝します。私の最終的なクエリは次のようになります。このクエリは、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