日期:2014-05-19  浏览次数:20605 次

问一条SQL语句,谢谢
有一张表dj_nsrxx(登记_纳税人信息),保存纳税人信息,字段如下
nsrsbh、nsrzt_dm、zjhm
纳税人识别号、纳税人状态、证件号码
其中:纳税人识别号为企业信息的关键字
纳税人状态:一般取值“开业”、“筹建期”、“非正常”、“非正常注销”、“注销”等
证件号码:保存企业法人的证件号码

现在需要找寻同一法人的企业,既有开业的又有非正常户的信息
(纳税人状态为“开业”或“筹建期”的视为“开业”;“非正常”和“非正常注销”的视为“非正常”)

最后生成一张表:
纳税人识别号_开业户、纳税人状态_开业户、证件号码、纳税人识别号_非正常户、纳税人状态_非正常户

举例如下
nsrsbh、nsrzt_dm、zjhm
企业A     开业               法人1
企业B     筹建期           法人1
企业C     非正常           法人1
企业D     非正常注销   法人1
企业E     注销               法人1

最后生成表
企业A       开业       法人1         企业C       非正常
企业A       开业       法人1         企业D       非正常注销
企业B       筹建期   法人1         企业C       非正常
企业B       筹建期   法人1         企业D       非正常注销

------解决方案--------------------
/*
create table dj_nsrxx(nsrsbh varchar(20),nsrzt_dm varchar(20),zjhm varchar(20))
insert into dj_nsrxx
select '企业A ', '开业 ', '法人1 '
union all
select '企业B ', '筹建期 ', '法人1 '
union all
select '企业C ', '非正常 ', '法人1 '
union all
select '企业D ', '非正常注销 ', '法人1 '
union all
select '企业E ', '注销 ', '法人1 '
*/
select * from dj_nsrxx

/*
nsrsbh nsrzt_dm zjhm
------------------------
企业A 开业 法人1
企业B 筹建期 法人1
企业C 非正常 法人1
企业D 非正常注销 法人1
企业E 注销 法人1
*/

select a.*,b.nsrsbh,b.nsrzt_dm from dj_nsrxx a
left join dj_nsrxx b on a.zjhm=b.zjhm and a.nsrzt_dm in ( '开业 ', '筹建期 ') and b.nsrzt_dm in ( '非正常 ', '非正常注销 ')
where a.nsrzt_dm in ( '开业 ', '筹建期 ')

/*
nsrsbh nsrzt_dm zjhm nsrsbh nsrzt_dm
-------------------------------------------
企业A 开业 法人1 企业C 非正常
企业A 开业 法人1 企业D 非正常注销
企业B 筹建期 法人1 企业C 非正常
企业B 筹建期 法人1 企业D 非正常注销
*/
------解决方案--------------------
if(object_id( 'dj_nsrxx ')is not null)
drop table dj_nsrxx

create table dj_nsrxx(nsrsbh varchar(20),nsrzt_dm varchar(20),zjhm varchar(20))
insert into dj_nsrxx
select '企业A ', '开业 ', '法人1 '
union all
select '企业B ', '筹建期 ', '法人1 '
union all
select '企业C ', '非正常 ', '法人1 '
union all
select '企业D ', '非正常注销 ', '法人1 '
union all
select '企业E ', '注销 ', '法人1 '


select a.*,b.nsrsbh,b.nsrzt_dm from dj_nsrxx a
left join dj_nsrxx b on a.zjhm=b.zjhm
and b.nsrzt_dm in ( '非正常 ', '非正常注销 ')
where a.nsrzt_dm in ( '开业 ', '筹建期 ')

呵呵。。。。