2016-05-15 31 views
1

我花了好幾個小時試圖解決這個問題,並提出了很多挫折,沒有結果。我是這個新手但願意學習。我使用SQLiteStudio特定周的SQL子查詢狀態添加到聚合

數據:

  1. 我有一個值得租金數據的年的表。
  2. 有租戶的客戶每週有一個入場(一些租賃開始或在一年內結束,因此可能出現少於52次
  3. 每週的數據從不同的報告導入到此表中並且有區別該報告的名稱(現場:REPORTNAME)
  4. 客戶可以從CUR(當前)狀態的更改,以TER(終止= 4星期通知),以便(前)
  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 

它給了我不到900名的引用,其中這些客戶已經支付£0的列表。

如果我單獨運行此查詢:

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 (給定您的過濾器)爲每個tenancyref。
  2. 將該查詢加入您在tenancyref上的第一個查詢。
  3. 變化上述條件聚集體max(case when reportname = joinedTable.reportname ...)
+0

這對我有用Kyle,謝謝 – Mark