当前位置: 代码迷 >> Sql Server >> 表自小弟我连接的SQL语句
  详细解决方案

表自小弟我连接的SQL语句

热度:73   发布时间:2016-04-24 09:40:34.0
表自我连接的SQL语句
一张表是这样的
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
  相关解决方案