1

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
4

1 に答える 1