0

SQL Server 2008 データベースに支払いテーブルがあります。これには、支払い額とクレジット額の両方が保持されます。クレジットはtxt_pay_type、「クレジット」に等しいフィールドによって識別されます。

私はいくつかのレポートを出力しようとしています.1つはWebサイトごとの総収益です.

この select ステートメントを使用して、Web サイトごとの合計値と平均値を取得しています。どうすればクレジット額を取り除くことができますか。

したがって、最終的な webTotal は少なくなり、クレジットになります。

つまり、クレジットではないすべての支払いの合計を計算し (以下のように)、クレジットであるすべての支払いの合計を計算し、一方を他方から取り出します。それとも、常温核融合のページでこれを行う方が良いですか?

例: Web サイト 1 支払いで合計 5000、クレジットで 1000。結果は次のようになります。

Website    Total Revenue  Average Sale   
Website 1  4000           200.00


SELECT 
  txt_web_name,
  SUM(mon_pay_amount) AS webTotal,
  AVG(mon_pay_amount) AS webAvg
FROM
  tbl_payment
  INNER JOIN dbo.tbl_orders ON (uid_pay_orderid = uid_orders)
  INNER JOIN dbo.tbl_websites ON (uid_order_webid = uid_websites)
WHERE
  dbo.tbl_payment.bit_pay_paid = <cfqueryparam cfsqltype="cf_sql_bit" value="yes">
  AND txt_pay_status <> <cfqueryparam cfsqltype="cf_sql_varchar" value="Credit">
GROUP BY
  txt_web_name

任意のポインタをいただければ幸いです。

4

3 に答える 3

1

条件付き合計が必要です:

SELECT txt_web_name, SUM(mon_pay_amount) AS webTotal, AVG(mon_pay_amount) AS webAvg,
       sum(case when txt_pay_type <> 'Credit' then mon_pay_amount else 0 end
          ) as TotalNoCredit,
       avg(case when txt_pay_type <> 'Credit' then mon_pay_amount end
          ) as AvgNoCredit
FROM tbl_payment
     INNER JOIN dbo.tbl_orders ON (uid_pay_orderid = uid_orders)
     INNER JOIN dbo.tbl_websites ON (uid_order_webid = uid_websites)
WHERE dbo.tbl_payment.bit_pay_paid = <cfqueryparam cfsqltype="cf_sql_bit" value="yes">
      AND txt_pay_status <> <cfqueryparam cfsqltype="cf_sql_varchar" value="Credit">
GROUP BY txt_web_name

合計に注意してください。私はデフォルトで 0 に設定しているため、1 か月の値が $0 になることはありません。平均については、デフォルトで NULL に設定されているため、クレジット値は平均で計算されません。

于 2012-08-12T19:20:12.630 に答える
1

次のようなステートメントを使用して、CASEを加算または減算するかどうかを決定できます。mon_pay_amount

SELECT
    txt_web_name,
    SUM(CASE 
        WHEN txt_pay_type = 'credit' 
        THEN -1 * mon_pay_amount 
        ELSE mon_pay_amount END) AS webTotal,
...
于 2012-08-12T19:20:42.550 に答える
1

列が何であるかは明確ではありませんが、次のようなものがチャンプとして機能します:

SUM(CASE txt_pay_type = 'credit' 
    THEN mon_pay_amount 
    ELSE (-1*mon_pay_amount) END) AS webTotal,
于 2012-08-12T19:21:00.197 に答える