解释这个sql语句SELECT nvl(sum(a.balance), 0) value FROM ods_g16_yp_2 a LEFT JOIN ( SELECT relativeserialno2, max(manageorgid) manageorgid/*管理机构*/, max(SCOPE) SCOPE/*企业规模*/ FROM ln_loan_acct_info WHERE data_dt = $date GROUP BY relativeserialno2) b ON a.serialno = b.relativeserialno2 WHERE ( a.guarantytype/*质物类型*/ IN ('001007002')/*质押-非上市股权*/ OR (a.guarantytype IN ('001007001')/*质押-上市股权*/ AND (a.thirdparty2/*上市地区*/ IS NULL OR a.thirdparty2 NOT IN ('01', '02')) /*人民币,英镑*/ OR a.guarantytype LIKE '02%' /*质押-知识产权*/ OR (a.guarantytype LIKE '001007001%'/*质押-上市股权*/ AND a.thirdparty2 IN ('01', '02')) OR substr(a.guarantytype, 1, 6) IN ('004001')/*质押-仓单*/ OR a.guarantytype LIKE '011%'/*质押-存货*/ OR a.guarantytype LIKE '001005%')/*质押-保单*/ ) AND b.scope = '2' AND a.data_dt = $date
时间: 2024-04-20 07:25:56 浏览: 129
这个SQL语句是用来查询指定日期($date下,符合一定条件的贷款账户的余额总和。具体条件如下:
- 从表ods_g16_yp_2中选取数据,用别名a表示。
- 左连接操作,连接子查询的结果集和表ods_g16_yp_2,用别名b表示。
- 子查询从表ln_loan_acct_info中选取数据,筛选条件为data_dt等于$date,并根据relativeserialno2分组,同时选择relativeserialno2、max(manageorgid)(作为管理机构)、max(SCOPE)(作为企业规模)的最大值。
- 在连接条件中,a.serialno与b.relativeserialno2进行匹配。
- 在WHERE子句中,设定了一系列条件:
- a.guarantytype为'001007002'(质押-非上市股权)。
- 或者,a.guarantytype为'001007001'(质押-上市股权),并且a.thirdparty2为NULL或不等于'01'或'02'(上市地区为人民币或英镑),或者a.guarantytype以'02%'开头(质押-知识产权),或者a.guarantytype以'001007001%'开头并且a.thirdparty2为'01'或'02',或者a.guarantytype的前6个字符为'004001'(质押-仓单),或者a.guarantytype以'011%'开头(质押-存货),或者a.guarantytype以'001005%'开头(质押-保单)。
- 并且b.scope为'2'。
- 并且a.data_dt等于$date。
最终,该语句会返回符合这些条件的账户余额总和,并将其命名为value。如果符合条件的记录不存在,则返回0。
阅读全文