2016-05-15 1 views
1

これを解決するために数時間を費やしてしまい、多くの欲求不満と結果が出ませんでした。私はこれに初心者ですが、喜んで学びます。私はSQLiteStudio特定の週のSQLサブクエリステータスが集計に追加されました

データを使用しています:

  1. 私はレンタルデータの価値は年を持つテーブルがあります。
  2. テナントを持っている顧客のためのエントリがあります(テナントが開始されたか、または年内に終了したため、52時間未満で表示される可能性があります)。
  3. 各週のデータを別のレポートからこのテーブルにインポートし、
  4. ステータスはCUR(現行)からTER(終了= 4週間通知)からFOR(旧式)に変更することができます
  5. 各顧客に固有のテナント参照番号(フィールド:TenancyRef )

私のクエリ:

だから、このクエリは、偉大な/正常に動作します:

SELECT TenancyRef, 
PropertyType, 
TenancyType, 
ManagementArea, 
count() AS NumberEntries, 
Round(Sum(Payments), 2) AS TotalPaid, 
Round(Sum(HBUCAmount), 2) AS TotalHB, 
Round(Sum(DebitAmount), 2) AS DebitTotal, 
Round(Round(Sum(DebitAmount), 2) - Round(Sum(HBUCAmount), 2), 2) AS mySubtraction 
FROM PSEData15 
WHERE PropertyType != "LOCK" AND 
PropertyType != "GP" 
GROUP BY TenancyRef 
HAVING TotalPaid = 0 AND 
DebitTotal > TotalHB 
ORDER BY TenancyRef DESC 

それは私にこれらの顧客は£0を支払っただけの下に900個の参照のリストを与えます。

私は別にこのクエリを実行する場合:

SELECT TenancyRef, Status, ClosingBal 
FROM PSEData15 
WHERE (ReportName = "PSE-W201552030416" OR ReportName = "PSE-F201552030416") AND 
Status != "FOR" AND 
PropertyType != "LOCK" AND 
PropertyType != "GP" AND 
ClosingBal > 0 

それは、先週に私のすべての現在の顧客を与え、(それらの3667)彼らの期末残高

目的:

基本的にどのような私は最初のクエリに追加される終了残高とwk52ステータスを探しています。どんな助けでも大歓迎です。私は、サンプルデータおよび所望の結果を求めた

:事前に

EDIT1をお願いします。テーブルを簡素化することは、私のサンプルは次のようになります。

TenancyRef | Status | Payments | Closing Bal | ReportName 
1   | CUR | 0.00  | 10.00  | 2015-Wk49 
1   | CUR | 0.00  | 20.00  | 2015-Wk50 
1   | CUR | 0.00  | 30.00  | 2015-Wk51 
1   | CUR | 0.00  | 40.00  | 2015-Wk52 
2   | CUR | 10.00 | 20.00  | 2015-Wk49 
2   | CUR | 10.00 | 20.00  | 2015-Wk50 
2   | TER | 10.00 | 20.00  | 2015-Wk51 
2   | FOR | 10.00 | 20.00  | 2015-Wk52 
3   | CUR | 10.00 | 20.00  | 2015-Wk49 
3   | TER | 10.00 | 20.00  | 2015-Wk50 
3   | FOR | 10.00 | 20.00  | 2015-Wk51 

望ましい結果:

TenancyRef | Count | TotalPaid | Wk52_ClosingBal | Wk52_status 
1   | 4  | 0.00  | 40.00   | CUR 
2   | 4  | 40.00  | 20.00   | FOR 
3   | 3  | 30.00  | 20.00   | FOR 
+0

から

  • 変更上記条件凝集体は、いくつかの例のデータおよび所望の結果を表示します。 –

  • +0

    CLに感謝します。私の質問がより明確になることを願っておられますように、私はこれを行っています! – Mark

    +0

    誰もがWk52レポートステータスを持っていますか?あなたのサンプルでは、​​テナント#3はそうではありません。 –

    答えて

    1

    誰もがWeek52のレポート行を持っている場合、それはちょうどあなたの最初のクエリに

    max(case when reportname = '2015-Wk52' then ClosingBal else null end) as Week52ClosingBal, 
    max(case when reportname = '2015-Wk52' then Status else null end) as Week52Status 
    

    を追加し、非常に単純です。

    一方で、あなたは顧客のために最後のステータスを決定する必要がある、場合(つまり、それらのすべてがWeek52レポートを持っていません):

    1. は、あなたが望む最後のREPORTNAMEを返すクエリを書きます各テナントレフについて(あなたのフィルターを与えられた)。
    2. tenancyrefの最初のクエリにそのクエリを結合します。max(case when reportname = joinedTable.reportname ...)
    +0

    これは私のために働いたカイル、ありがとう – Mark

    関連する問題