日期:2014-05-18  浏览次数:20513 次

求一经典语句,判断是否单级!请指点
我这个写法有问题,请予以指正 :)

select     distinct   A.kmbh,A.kmmc,case   when   len(A.kmbh)=4   and  
charindex(A.KMBH,B.KMBH)> 0   and   len(B.KMBH)> 4   THEN   1   ELSE   0   END
from  
(SELECT   KMBH,KMMC   FROM   KMB_2005   WHERE   LEN(KMBH)=4)   A,  
(SELECT   KMBH,KMMC   FROM   KMB_2005   WHERE   LEN(KMBH)> 4)   B    
order   by   a.kmbh,kmmc

------解决方案--------------------
select distinct A.kmbh,A.kmmc,case when len(A.kmbh)=4 and
charindex(A.KMBH,B.KMBH)> 0 and len(B.KMBH)> 4 THEN 1 ELSE 0 END
from
(SELECT KMBH,KMMC FROM KMB_2005 WHERE LEN(KMBH)=4) A,
(SELECT KMBH,KMMC FROM KMB_2005 WHERE LEN(KMBH)> 4) B
order by a.kmbh,kmmc

------------
在SQL中是區分大小寫的,還有就是A,B表之間沒有關聯條件
------解决方案--------------------
从原语句改的话

select A.kmbh,A.kmmc,max(case when B.KMBH is not null THEN 1 ELSE 0 END)
from
(SELECT KMBH,KMMC FROM KMB_2005 WHERE LEN(KMBH)=4) A left join
(SELECT KMBH,KMMC FROM KMB_2005 WHERE LEN(KMBH)> 4) B
on charindex(A.KMBH,B.KMBH)> 0
group by A.kmbh,A.kmmc
order by a.kmbh,a.kmmc

------解决方案--------------------
use tempdb
create table KMB_2005
(
nId int identity(1,1) ,
kmbh nvarchar(100),
kmmc nvarchar(100),
primary key(nId)
)

go

insert KMB_2005(kmbh,kmmc) values( 'aa ', '1 ');
insert KMB_2005 values( 'aaa ', '2 ');
insert KMB_2005 values( 'aaaa ', '3 ');
insert KMB_2005 values( 'aaaaa ', '4 ');
insert KMB_2005 values( 'aaaaaa ', '5 ');
insert KMB_2005 values( 'bbbbbb ', '6 ');
insert KMB_2005 values( 'bbbbbb ', '7 ');

go

select distinct A.kmbh, A.kmmc
from KMB_2005 a
where len(A.kmbh)=4 and exists
(select 1 from KMB_2005 b where len(b.kmbh)> 4 and charIndex(A.KMBH,B.KMBH)> 0)
order by a.kmbh,a.kmmc

drop table KMB_2005

---------------------------------
kmbh kmmc
---------- ----------
aaaa 3

(1 row(s) affected)