一张表是这样的
Code ParentCode Name Gender
1 3 xx 男
2 3 yy 男
3 zz 男
4 2 aa 女
我要通过一条语句列出所有的code,并判断该code是否有parentcode和childcode
例如我想通过一条语句查询得出
Code Name Gender HaveParentCode HaveChildCode
1 xx 男 1 0
2 yy 男 1 1
3 zz 男 0 0
4 aa 女 1 0
------解决思路----------------------
SELECT DISTINCT Code,Name,Gender
,CASE WHEN T2.Code IS NOT NULL THEN 1 ELSE 0 END HaveParentCode
,CASE WHEN T3.Code IS NOT NULL THEN 1 ELSE 0 END HaveChildCode
FROM TB T1
LEFT JOIN TB T2 ON T1.ParentCode=T2.Code
LEFT JOIN TB T3 ON T1.Code=T3.ParentCode
------解决思路----------------------
with t(Code,ParentCode,Name,Gender) as (
select 1,3,'xx','男' union all
select 2,3,'yy','男' union all
select 3,null,'zz','男' union all
select 4,2,'aa','女'
)
select t1.*,isnull(t2.HaveParentCode,0)HaveParentCode,isnull(t3.HaveChildCode,0)HaveChildCode
from t t1
outer apply (select top 1 1 HaveParentCode from t t2 where t2.Code=t1.ParentCode) t2
outer apply (select top 1 1 HaveChildCode from t t3 where t1.Code=t3.ParentCode) t3
----------------------------------------------------------------
Code ParentCode Name Gender HaveParentCode HaveChildCode
----------- ----------- ---- ------ -------------- -------------
1 3 xx 男 1 0
2 3 yy 男 1 1
3 NULL zz 男 0 1
4 2 aa 女 1 0