SUM機能のサポートが必要です。同じアカウントの請求額を合計して1つの総計にしようとしていますが、結果には、SUM列が最初の列の3倍になっています。
模擬データの結果として必要なものは次のとおりです。
AccountNumber Bill BillDate
1 100.00 1/1/2013
1 150.00 2/1/2013
1 200.00 3/1/2013
2 75.00 1/1/2013
2 100.00 2/1/2013
クエリ:
SELECT AccountNumber, Bill, BillDate, SUM(Bill)
FROM Table1
GROUP BY AccountNumber, Bill, BillDate
AccountNumber Bill BillDate SUM(Bill)
1 100.00 1/1/2013 450.00
1 150.00 2/1/2013 450.00
1 200.00 3/1/2013 450.00
2 75.00 1/1/2013 175.00
2 100.00 2/1/2013 175.00
OR
AccountNumber Bill SUM(Bill)
1 100.00 450.00
2 75.00 175.00
可能であれば、両方の結果を得たいと思います。
ここに私が得ているものがあります:
私のSUM列は3倍になっていますが、実際にはアカウント番号に基づいてデータを合計しているわけではありません。
AccountNumber Bill BillDate SUM(Bill)
1 100.00 1/1/2013 300.00
1 150.00 2/1/2013 450.00
1 200.00 3/1/2013 600.00
2 75.00 1/1/2013 225.00
2 100.00 2/1/2013 300.00
ご回答ありがとうございます。私の問題は、ロジックではなく、エントリの重複によるデータベースの問題だったことがわかりました。クイックテーブル同期により修正され、SUM機能は期待どおりに機能しました。これはすべてSUM機能の有用な知識であり、使用に問題がある場合は読む価値があります。
結果をグループ化したくない場合は、ウィンドウ関数を使用します。
DBMSを記述していませんが、これはANSI SQLです。
SELECT AccountNumber,
Bill,
BillDate,
SUM(Bill) over (partition by accountNumber) as account_total
FROM Table1
order by AccountNumber, BillDate;
SQLFiddleは次のとおりです。 http://sqlfiddle.com/#!15/2c35e/1
以下を追加することにより、実行中の合計を追加することもできます。
sum(bill) over (partition by account_number order by bill_date) as sum_to_date
現在の行の日付までの合計が表示されます。
BillDate
でグループ化していますが、請求日はアカウントごとに異なるため、行はグループ化されません。考えてみると、それは理にかなっていない-彼らは異なる法案であり、異なる日付を持っています。 Bill
についても同じことが言えます。アカウントの請求書を合計しようとしていますが、なぜそれでグループ化するのですか?
BillDate
とBill
をselect句とgroup by句から除外すると、正しい結果が得られます。
SELECT AccountNumber, SUM(Bill)
FROM Table1
GROUP BY AccountNumber
SUMを適用するフィールドでグループ化し、COUNT、SUM、AVEなどの複数行の値以外のフィールドをSELECTに含めないでください。この場合のようにBillフィールドを含めると、最初の値のみ行のセットが表示されますが、ほとんど意味がなく、混乱を招きます。
これにより、アカウント番号ごとの請求額の合計が返されます。
SELECT SUM(Bill) FROM Table1 GROUP BY AccountNumber
必要に応じて、WHERE、ORDER BYなどの句を追加できます。
これを試しましたが、集計関数またはGROUP BY句のいずれにも含まれていないため、selectステートメントで自分のフィールドが無効であるというメッセージは表示されません。そこに留めておかなければなりません。これを回避する方法はありますか?
自己結合を行う必要があります。同じサブクエリで非集計データを集計および保持することはできません。例えば。
select q2.AccountNumber, q2.Bill, q2.BillDate, q1.BillSum
from
(
SELECT AccountNumber, SUM(Bill) as BillSum
FROM Table1
GROUP BY AccountNumber
) q1,
(
select AccountNumber, Bill, BillDate
from table1
) q2
where q1.AccountNumber = q2.AccountNumber