当前位置: 代码迷 >> Sql Server >> SQl 查询语句,跪求,该如何处理
  详细解决方案

SQl 查询语句,跪求,该如何处理

热度:15   发布时间:2016-04-24 18:21:29.0
SQl 查询语句,跪求
declare @tb table(mlszh varchar(12),yjm varchar(40))
insert into @tb(mlszh,yjm)
select '201400912532','81172180058771689485' union all
select '201400912532','81346930080349091223' union all
select '201400912532','81346930080349091224' union all
select '201400912532','81346930080349091223' union all
select '201400912534','81327590023827322966' union all
select '201400912534','81327590023826922558'
想要的结果

说明:
1.按mlszh分类,如果yjm有重复的,则改组mlszh对应的clbz为n否则为y
2.标注出同一组内重复的记录对应的cfbz为y
------解决方案--------------------
declare @tb table(mlszh varchar(12),yjm varchar(40))
 insert into @tb(mlszh,yjm)
 select '201400912532','81172180058771689485' union all
 select '201400912532','81346930080349091223' union all
 select '201400912532','81346930080349091224' union all
 select '201400912532','81346930080349091223' union all
 select '201400912534','81327590023827322966' union all
 select '201400912534','81327590023826922558'

 
SELECT
  *,
  CASE WHEN EXISTS(SELECT mlszh FROM (SELECT mlszh,yjm,COUNT(1) AS num FROM @tb t GROUP BY mlszh,yjm HAVING COUNT(1)>1)a WHERE mlszh=t.mlszh) THEN 'n' ELSE 'y' END AS clbz,
  CASE WHEN EXISTS(SELECT mlszh FROM (SELECT mlszh,yjm,COUNT(1) AS num FROM @tb t GROUP BY mlszh,yjm HAVING COUNT(1)>1)a WHERE mlszh=t.mlszh  AND yjm=t.yjm) THEN 'y' ELSE '' END AS cfbz
 FROM
  @tb t
  
  /*mlszh        yjm                                      clbz cfbz
------------ ---------------------------------------- ---- ----
201400912532 81172180058771689485                     n    
201400912532 81346930080349091223                     n    y
201400912532 81346930080349091224                     n    
201400912532 81346930080349091223                     n    y
201400912534 81327590023827322966                     y    
201400912534 81327590023826922558                     y    

(6 行受影响)
*/

------解决方案--------------------
引用:
Quote: 引用:

select *, case when (select count(*) from #a where mlszh=a.mlszh and yjm=a.yjm )>1 then 'n' else 'y' end 'clbz',
          case when (select count(*) from #a where mlszh=a.mlszh and yjm=a.yjm)>1 then 'y' else '' end 'cfbz' 
          from #a a
不对,你自己看


select *, case when  exists (select yjm from  #a where mlszh=a.mlszh  group by yjm having count(*)>1) then 'n' else 'y' end 'clbz',
          case when (select count(*) from #a where mlszh=a.mlszh and yjm=a.yjm)>1 then 'y' else '' end 'cfbz' 
          from #a a

 

mlszh        yjm                                      clbz cfbz
------------ ---------------------------------------- ---- ----
201400912532 81172180058771689485                     n    
201400912532 81346930080349091223                     n    y
201400912532 81346930080349091223                     n    y
  相关解决方案