SQL 将特定周的子查询状态添加到聚合

SQL Subquery status for specific week added to aggregate

我花了几个小时试图解决这个问题,结果很沮丧,但没有结果。我是这方面的新手,但愿意学习。我正在使用 SQLiteStudio

数据:

  1. 我有一个 table 有一年的租赁数据。
  2. 有租约的客户每周有一个条目(一些租约在一年内开始和/或结束,因此可能出现少于 52 次
  3. 每周数据都会从不同的报告导入到此 table 中,并通过报告名称(字段:ReportName)加以区分
  4. 客户可以将状态从 CUR(当前)更改为 TER(终止 = 提前 4 周通知)到 FOR(以前)
  5. 每个客户都有一个唯一的租赁参考号(字段:TenancyRef)

我的查询:

所以这个查询有效 fine/great:

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 状态。任何帮助将不胜感激。提前谢谢你

编辑 1:

我被要求提供样本数据和期望的结果。简化 table 我的示例将是:

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

如果每个人都有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. 写一个查询,其中 returns 您想要的每个租户参考的最后一个报告名称(给定您的过滤器)。
  2. 将该查询加入您在 tenancyref 上的第一个查询。
  3. 将上述条件聚合改为max(case when reportname = joinedTable.reportname ... )