--问题描述
-- output format : Lastname,FirstName MiddleName < _,_ _ >
--1.如果没有FirstName MiddleName 不要有逗号。e.g. Lastname
--2.如果没有FirstName,逗号后不要有空格。e.g. Lastname,MiddleName
 
--问题:不要用case when 有其他的方法可以实现吗?
declare @t table(FirstName varchar(50),MiddleName varchar(50),FamilyName varchar(50))
insert into @t   
select 'FirstName','MiddleName','LastName' union all
select 'FirstName','','LastName' union all
select '','MiddleName','LastName' union all
select 'FirstName','MiddleName','' union all 
select 'FirstName','','' union all
select '','MiddleName','' union all
select '','','LastName'
  
select 
LTRIM(Replace(case when (ISNULL(MiddleName, '')='' and ISNULL(FirstName, '')='') or ISNULL(FamilyName, '')='' then   ISNULL(FamilyName, '') else ISNULL(FamilyName, '') +',' end  + case when ISNULL(FirstName, '')='' then ISNULL(FirstName, '') else ISNULL(FirstName, '') + ' ' end  + ISNULL(MiddleName, ''), '', ''))
as Fullname
from @t

解决方案 »

  1.   

    不用case when   用什么?
      

  2.   

    replace(...,'這里是空格?','')
    可以簡化一下case判斷
      

  3.   


    恩  那个也是抄的,应该是replace的参数吧。
      

  4.   

    看樓主的意思
    應該是這樣select 
    isnull(nullif(ISNULL(FamilyName, ''),'')+isnull(nullif('',ISNULL(MiddleName, '')+ ISNULL(FirstName, ''))+',',''),'')
    +
    isnull(nullif(ISNULL(FirstName, ''),'')+isnull(nullif('',ISNULL(MiddleName, ''))+' ',''),'')

    ISNULL(MiddleName, '')as Fullname
    from @t
      

  5.   

    不用case when的话,就用union all
    select * from tb where condition1...
    union all
    select * from tb where condition2...
    union all
    select * from tb where condition3...
      

  6.   

    哈, 那叫老大帮你写一个..感觉这个只能这样CASE判断是否为空吧
      

  7.   

    select 
    Ltrim(Isnull(Stuff(Isnull(FamilyName, '')+','+Isnull(FirstName, ''),PATINDEX('[,]%',Isnull(FamilyName, '')+','+Isnull(FirstName, '')),1,''),
    Isnull(Stuff(Isnull(FamilyName, '')+','+Isnull(FirstName, '')+' '+Isnull(MiddleName, ''),PATINDEX('%[,]',Isnull(FamilyName, '')+','+Isnull(FirstName, '')+' '+Isnull(MiddleName, '')),1,''),Isnull(FamilyName, '')+','+Isnull(FirstName, ''))
    )+' '+Isnull(MiddleName, ''))
    as Fullname
    from @t