SQL 将特定周的子查询状态添加到聚合
SQL Subquery status for specific week added to aggregate
我花了几个小时试图解决这个问题,结果很沮丧,但没有结果。我是这方面的新手,但愿意学习。我正在使用 SQLiteStudio
数据:
- 我有一个 table 有一年的租赁数据。
- 有租约的客户每周有一个条目(一些租约在一年内开始和/或结束,因此可能出现少于 52 次
- 每周数据都会从不同的报告导入到此 table 中,并通过报告名称(字段:ReportName)加以区分
- 客户可以将状态从 CUR(当前)更改为 TER(终止 = 提前 4 周通知)到 FOR(以前)
- 每个客户都有一个唯一的租赁参考号(字段: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 报告):
- 写一个查询,其中 returns 您想要的每个租户参考的最后一个报告名称(给定您的过滤器)。
- 将该查询加入您在 tenancyref 上的第一个查询。
- 将上述条件聚合改为
max(case when reportname = joinedTable.reportname ... )
我花了几个小时试图解决这个问题,结果很沮丧,但没有结果。我是这方面的新手,但愿意学习。我正在使用 SQLiteStudio
数据:
- 我有一个 table 有一年的租赁数据。
- 有租约的客户每周有一个条目(一些租约在一年内开始和/或结束,因此可能出现少于 52 次
- 每周数据都会从不同的报告导入到此 table 中,并通过报告名称(字段:ReportName)加以区分
- 客户可以将状态从 CUR(当前)更改为 TER(终止 = 提前 4 周通知)到 FOR(以前)
- 每个客户都有一个唯一的租赁参考号(字段: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 报告):
- 写一个查询,其中 returns 您想要的每个租户参考的最后一个报告名称(给定您的过滤器)。
- 将该查询加入您在 tenancyref 上的第一个查询。
- 将上述条件聚合改为
max(case when reportname = joinedTable.reportname ... )