需求:
- 查询工商注册信息与系统中登记信息不一致的问题
- 一致的字段不标记,不一致的字段标记 “●”
- 如果外部系统只要有一个出资人股权比例为空 , 股权比例 预警的时候就显示空心圆
SQL查询指导思想:
- 注意 left join 、join 的查询区别
- case when 的使用
- 关联查询得到一个虚拟的中间表 可基于中间表再做相关的关联查询、子查询...
- 先想好怎么处理 将一个复杂问题 拆分为多个简单的问题 最后拼接即可
查询结果预览:
![](https://img-blog.csdnimg.cn/20200524110902966.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW5nd2FuZzIwMTY=,size_16,color_FFFFFF,t_70)
牛刀小试:
![](https://img-blog.csdnimg.cn/20191025110548692.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW5nd2FuZzIwMTY=,size_16,color_FFFFFF,t_70)
SELECT
count( a.unitid ) AS "条数",
HEX( a.unitid ) AS "单位ID"
FROM
PMS_COMPANY_HOLDER AS a
WHERE
a.HOLDER_ZB_NEW = ''
AND HEX( a.unitid ) IN (
SELECT
HEX( g.unitid )
FROM
GXJT_YJ AS g
LEFT JOIN md_org AS m ON m.recid = g.unitid
LEFT JOIN PMS_COMPANY_INFO AS p ON m.recid = p.unitid
WHERE
HEX( g.unitid ) LIKE '%67%'
AND g.warningType = 'REGISTRATION_DIFFERENT'
)
GROUP BY
a.unitid
大展身手:
define query ad_query(@unitId string)
begin
SELECT
w.stdname AS "单位",
CASE
WHEN w.WARNINGREASON CONTAINS 'COMPANY_NAME' THEN
' ●'
END AS "企业名称",
CASE
WHEN y.num > 0 THEN
' ○'
WHEN w.WARNINGREASON CONTAINS 'EQUITY_SITUATION' THEN
' ●'
END AS "股权情况",
CASE
WHEN w.WARNINGREASON CONTAINS 'LEGAL_REPRESENTATIVE' THEN
' ●'
END AS "法定代表人",
CASE
WHEN w.WARNINGREASON CONTAINS 'REGISTERED_CAPITAL' THEN
' ●'
END AS "注册资本",
CASE
WHEN w.WARNINGREASON CONTAINS 'REGISTRATION_PROVIENCE' THEN
' ●'
END AS "注册地",
CASE
WHEN w.WARNINGREASON CONTAINS 'REGISTRATION_DATE' THEN
' ●'
END AS "注册日期",
w.COMPANY_S_EXT_NODENUM AS "所属省份",
w.UNITID AS "单位id",
w.GQ_DATATIME AS "股权数据时期",
w.GS_DATATIME AS "工商数据时期"
FROM
(
SELECT
m.stdname,
CASE
WHEN g.WARNINGREASON CONTAINS 'COMPANY_NAME' THEN
' ●'
END AS "COMPANY_NAME",
CASE
WHEN g.WARNINGREASON CONTAINS 'EQUITY_SITUATION' THEN
' ●'
END AS "EQUITY_SITUATION",
CASE
WHEN g.WARNINGREASON CONTAINS 'LEGAL_REPRESENTATIVE' THEN
' ●'
END AS "LEGAL_REPRESENTATIVE",
CASE
WHEN g.WARNINGREASON CONTAINS 'REGISTERED_CAPITAL' THEN
' ●'
END AS "REGISTERED_CAPITAL",
CASE
WHEN g.WARNINGREASON CONTAINS 'REGISTRATION_PROVIENCE' THEN
' ●'
END AS "REGISTRATION_PROVIENCE",
CASE
WHEN g.WARNINGREASON CONTAINS 'REGISTRATION_DATE' THEN
' ●'
END AS "REGISTRATION_DATE",
p.COMPANY_S_EXT_NODENUM AS "COMPANY_S_EXT_NODENUM",
g.UNITID AS "UNITID",
g.GQ_DATATIME AS "GQ_DATATIME",
g.GS_DATATIME AS "GS_DATATIME",
g.WARNINGREASON AS "WARNINGREASON"
FROM
GXJT_YJ AS g
JOIN md_org AS m ON m.recid = g.unitid
JOIN PMS_COMPANY_INFO AS p ON m.recid = p.unitid
WHERE
to_char ( m.parents ) CONTAINS ( to_char ( @unitId ) )
AND g.warningType = 'REGISTRATION_DIFFERENT'
) AS w
LEFT JOIN (
SELECT
count( a.unitid ) AS num,
a.unitid
FROM
PMS_COMPANY_HOLDER AS a
WHERE
a.HOLDER_ZB_NEW = ''
AND a.unitid IN (
SELECT
g.unitid
FROM
GXJT_YJ AS g
JOIN md_org AS m ON m.recid = g.unitid
JOIN PMS_COMPANY_INFO AS p ON m.recid = p.unitid
WHERE
to_char ( m.parents ) CONTAINS ( to_char ( @unitId ) )
AND g.warningType = 'REGISTRATION_DIFFERENT'
)
GROUP BY
a.unitid
) AS y ON y.unitid = w.UNITID
end