2011-08-09 13 views
3

料金とクレジットのレポートをアイテムコードと請求期間別にグループ化してクエリを作成します。それから引っ張る料金表は以下の形式があります:私は私の現在のクエリはかなりうまく処理し、いくつかの問題に実行している値に応じて結果セットから特定のレコードを選択する

BillingPeriod|ItemCode|ItemName|Charge|IsAdjustment|AdjustmentDate|ReportTimestamp 

を、私は思います。課金コードは課金コードでは発生しないため、課金されていないため、各課金期間を表示する均一なテーブルが必要なので、請求期間とゼロでいっぱいのダミーテーブルを作成し、ユニオン、このような料金表からの結果、とのこと:

SELECT BillingPeriod, SumOfCharge AS Total FROM (
     SELECT BillingPeriod, 0 AS SumOfCharge 
     FROM Charges 
     UNION 
     SELECT BillingPeriod, SUM(Charge) AS SumOfCharge 
     FROM Charges 
     WHERE (ItemCode Between 1900 and 1995) 
     GROUP BY BillingPeriod 
); 

だから何が起こって終わることはこれです:言うには、例えば、私は1回の2011年の1月と3月の料金が、他には何を持っています。表には、このような出力を返します:私は何をしようとしている

BillingPeriod|Charge 
1/1/2011  |100.00 
1/1/2011  |0 
2/1/2011  |0 
3/1/2011  |0 
3/1/2011  |-23.00 
4/1/2011  |0 
5/1/2011  |0 
6/1/2011  |0 
7/1/2011  |0 

は、それらの0の値を持つ行を取り除くと、レポートに表示する正しいものを選択です。トリッキーな部分は、値が正、負、ゼロのいずれかになる可能性があるため、MAXを実行するだけでは機能しません。私もFIRST()またはLAST()を試しました。(COALESCE())が動かない、私はアクセスしています)。どんな助けもありがとう。

答えて

4

だけBillingPeriodによってSumOfChargeフィールドとグループをまとめる:

SELECT BillingPeriod, SUM(SumOfCharge) AS Total FROM (
    SELECT BillingPeriod, 0 AS SumOfCharge 
    FROM Charges 
    UNION 
    SELECT BillingPeriod, SUM(Charge) AS SumOfCharge 
    FROM Charges 
    WHERE (ItemCode Between 1900 and 1995) 
    GROUP BY BillingPeriod 
) GROUP BY BillingPeriod; 
+0

すごい、私は信じることができません私はそれがあなたに感謝したとは思わなかった! – Tom

1

方法について:

SELECT P.BillingPeriod, 
ISNULL(C.SumOfCharge,0) AS SumOfCharge 
FROM (
    SELECT Distinct BillingPeriod 
    FROM Charges) AS P 
LEFT JOIN 
    (SELECT BillingPeriod, SUM(Charge) AS SumOfCharge 
    FROM Charges 
    WHERE (ItemCode Between 1900 and 1995) 
    GROUP BY BillingPeriod) as C 
ON P.BillingPeriod = C.BillingPeriod 
ORDER BY P.BillingPeriod 
0

うこの作品のようなもの:

SELECT C.BillingPeriod, 
     ISNULL(C1.SumOfCharge, 0) AS Total 
FROM Charges 
LEFT OUTER JOIN (SELECT BillingPeriod, SUM(Charge) AS SumOfCharge 
       FROM Charges 
       WHERE (ItemCode Between 1900 and 1995) 
       GROUP BY BillingPeriod) C1 ON C.BillingPeriod = C1.BillingPeriod 
関連する問題