select year,sum(nvl(case when jclx='1' then jccs end,0)) as rcjcjccs,sum(nvl(case when jclx='1' then jccs end,0))-sum(nvl(case when jclx='1' then hgs end,0)) as rcjcbhgs ,sum(nvl(case when jclx='2' then jccs end,0)) as zxjcjccs,sum(nvl(case when jclx='2' then jccs end,0))-sum(nvl(case when jclx='2' then hgs end,0)) as zxjcbhgs ,sum(nvl(case when jclx='3' then jccs end,0)) as fxjcjccs,sum(nvl(case when jclx='3' then jccs end,0))-sum(nvl(case when jclx='3' then hgs end,0)) as fxjcbhgs ,sum(nvl(case when jclx='4' then jccs end,0)) as xkjcjccs,sum(nvl(case when jclx='4' then jccs end,0))-sum(nvl(case when jclx='4' then hgs end,0)) as xkjcbhgs ,sum(nvl(case when jclx='5' then jccs end,0)) as zgfccs,sum(nvl(case when jclx='5' then jccs end,0))-sum(nvl(case when jclx='5' then hgs end,0)) as zgfcbhgs ,sum(nvl(case when jclx='7' then jccs end,0)) as txjcjccs,sum(nvl(case when jclx='7' then jccs end,0))-sum(nvl(case when jclx='7' then hgs end,0)) as txjcbhgs ,sum(nvl(case when jclx='9' then jccs end,0)) as sjjcjccs,sum(nvl(case when jclx='9' then jccs end,0))-sum(nvl(case when jclx='9' then hgs end,0)) as sjjcbhgs ,sum(nvl(case when jclx='10' then jccs end,0)) as yyjcjccs,sum(nvl(case when jclx='10' then jccs end,0))-sum(nvl(case when jclx='10' then hgs end,0)) as yyjcbhgs ,sum(nvl(case when jclx='11' then jccs end,0)) as zchcjccs,sum(nvl(case when jclx='11' then jccs end,0))-sum(nvl(case when jclx='11' then hgs end,0)) as zchcbhgs ,sum(nvl(case when jclx='12' then jccs end,0)) as bahcjccs,sum(nvl(case when jclx='12' then jccs end,0))-sum(nvl(case when jclx='12' then hgs end,0)) as bahcbhgs from ( select case when jcbz='1' then '5' else jclx end as jclx, year,jccs,hgs from ( select rec.jclx,rec.jcbz, rec.year, COUNT( rec.ID ) AS jccs, SUM( CASE aa10.AAA103 WHEN '不符合' THEN '0' ELSE '1' END) as hgs from t_inspect_record rec join AMR_ENTERPRISE.t_pub_enterprise ent on rec.ztlsh = ent.id JOIN aa10a1 aa10 ON ( rec.JCJG = aa10.AAA102 AND aa10.AAA100 = 'JCJG' ) WHERE rec.ZT = 1 AND rec.STATUS = 1 and (rec.sszy='10' or rec.sszy='11') group by rec.jclx,rec.jcbz,rec.year order by rec.jclx,rec.jcbz,rec.year) ) where 1=1 and year=':year' group by year order by year 以上是一个sql,我想通过正则表达式,以from、join为关键字,分析出查询sql中涉及的表名
时间: 2023-12-02 16:06:06 浏览: 146
可以使用正则表达式来解析出SQL查询语句中涉及到的表名。以下是一个示例正则表达式:
```
/(from|join)\s+(\w+)/i
```
该正则表达式可以匹配以`from`和`join`关键字开始后面跟着一个或多个单词的字符串。其中,`\s+`匹配空格或制表符,`\w+`匹配一个或多个字母、数字或下划线。
使用该正则表达式,可以在PHP中使用`preg_match_all`函数来解析出SQL查询语句中涉及到的表名,如下所示:
```php
$sql = "SELECT year, sum(...) FROM t_inspect_record rec JOIN AMR_ENTERPRISE.t_pub_enterprise ent ON rec.ztlsh = ent.id WHERE 1=1 AND year=':year' GROUP BY year ORDER BY year";
preg_match_all('/(from|join)\s+(\w+)/i', $sql, $matches);
$tables = array_unique($matches[2]);
print_r($tables);
```
该代码会输出SQL查询语句中涉及到的所有表名,如`"t_inspect_record"`,`"AMR_ENTERPRISE.t_pub_enterprise"`等。其中,`array_unique`函数用于去重。
相关问题
select nvl(sum(case when BB01.ABB008 = '02' then '1' else '0' end), 0) dbaj, nvl(sum(case when BB01.ABB029 = '0' AND BB01.ABB008 != '0' then '1' else '0' end), 0) blzaj, nvl(sum(case when BB01.ABB029 = '9' then '1' else '0' end), 0) ybaj, nvl(sum(case when 1 = 1 then '1' else '0' end), 0) ajtol from LABOR_LDJC.BB01 where BB01.AAE100 = '1';
这是一个 SQL 查询语句,查询 LABOR_LDJC.BB01 表中符合条件的数据,并对这些数据进行聚合统计。该查询语句的作用是统计满足特定条件的记录数量,并将结果按照指定的别名进行命名,别名分别为 dbaj、blzaj、ybaj 和 ajtol。
具体而言,该查询语句的含义如下:
- 查询 LABOR_LDJC.BB01 表中符合条件 BB01.AAE100 = '1' 的记录。
- 对满足条件的记录进行聚合统计,统计结果按照别名进行命名。
- 别名 dbaj 表示满足条件 BB01.ABB008 = '02' 的记录数量。
- 别名 blzaj 表示满足条件 BB01.ABB029 = '0' AND BB01.ABB008 != '0' 的记录数量。
- 别名 ybaj 表示满足条件 BB01.ABB029 = '9' 的记录数量。
- 别名 ajtol 表示查询结果的总记录数量。
其中,关键词 nvl 的作用是判断聚合结果是否为空,如果为空,则将其转换为 0。CASE WHEN 语句按照条件进行判断,并返回特定的结果。当条件成立时,返回 '1',否则返回 '0'。
CREATE TABLE TEST_ZHANG_0518_1 AS SELECT A.CAMP_ID, SUM(A.income_year) AS income_year, -- 年累出账收入 SUM(A.INCOME_END) AS INCOME_END, -- 去年12月出账月收入 -- 拍照移网用户出账 SUM(CASE WHEN A.PRODUCT_FLAG IN ('1','2','3') AND A.ACCT_TAG_END='1' AND A.ACCT_TAG='1' THEN 1 ELSE 0 END) AS PZ_YW_ACT_NEW, SUM(CASE WHEN A.PRODUCT_FLAG IN ('1','2','3') AND A.ACCT_TAG_END='1' THEN 1 ELSE 0 END) AS PZ_YW_ACT_OLD, -- 拍照宽带用户在网 SUM(CASE WHEN A.PRODUCT_FLAG IN ('4') AND A.ON_TAG_END='1' AND A.ON_TAG='1' THEN 1 ELSE 0 END) AS PZ_KD_ONS_NEW, SUM(CASE WHEN A.PRODUCT_FLAG IN ('4') AND A.ON_TAG_END='1' THEN 1 ELSE 0 END) AS PZ_KD_ONS_OLD FROM DWD_M_PRO_YF_USER_FS A WHERE A.DEAL_MON='202305' AND NVL(A.ON_TAG_END,'0')<>'-1' -- 拍照用户 GROUP BY A.CAMP_ID;
这是一个创建表的SQL语句,表名为TEST_ZHANG_0518_1,该表从DWD_M_PRO_YF_USER_FS表中选取特定月份(202305)的数据,并按照CAMP_ID字段进行分组。在分组后的结果中,对income_year字段进行求和,得到年累出账收入;对INCOME_END字段进行求和,得到去年12月出账月收入;对满足特定条件的PZ_YW_ACT_NEW、PZ_YW_ACT_OLD、PZ_KD_ONS_NEW和PZ_KD_ONS_OLD字段进行统计。其中,PZ_YW_ACT_NEW表示拍照移网用户中当月激活的新用户数量,PZ_YW_ACT_OLD表示拍照移网用户中当月激活的老用户数量,PZ_KD_ONS_NEW表示拍照宽带用户中当月在网的新用户数量,PZ_KD_ONS_OLD表示拍照宽带用户中当月在网的老用户数量。
阅读全文