假设有一个表 keyb  里面字段如下:    key                  count 
   大学+教育                  5
   计算机+书本                1
   大学生+吃饭                3
   书本+计算机                3
   保安+学生                  8
   教育+大学                  12怎么样处理成  
   
    
       key                  count 
   大学+教育                  17
   计算机+书本                4
   大学生+吃饭                3            
   保安+学生                  8
也就是说计算 判断 key 的回文(比如   大学+教育 等同于 教育+大学  来统计后面的 count  )
 
sql 语句应该怎么写?
万分感谢@

解决方案 »

  1.   

    declare @t table([key] varchar(20),[count] int)
    insert into @t select '大学+教育  ',5 
    insert into @t select '计算机+书本',1 
    insert into @t select '大学生+吃饭',3 
    insert into @t select '书本+计算机',3 
    insert into @t select '保安+学生  ',8 
    insert into @t select '教育+大学  ',12 select
        key_a+'+'+key_b as [key],sum([count]) as [count]
    from
        (select rtrim(left([key],charindex('+',[key])-1)) key_a,rtrim(stuff([key],1,charindex('+',[key]),'')) key_b,[count] from @t
         union all
         select rtrim(stuff([key],1,charindex('+',[key]),'')) key_b,rtrim(left([key],charindex('+',[key])-1)) key_a,[count] from @t) t
    where
        key_a>=key_b
    group by
        key_a,key_b/*
    key                count       
    -----------------  ----- 
    学生+保安              8
    大学生+吃饭            3
    教育+大学             17
    书本+计算机            4
    */
      

  2.   

    if object_id('[tb1]') is not null drop table [tb] 
     go 
    create table [tb1]([key] varchar(20),[count] int)
    insert into [tb1] select '大学+教育  ',5 
    insert into [tb1] select '计算机+书本',1 
    insert into [tb1] select '大学生+吃饭',3 
    insert into [tb1] select '书本+计算机',3 
    insert into [tb1] select '保安+学生  ',8 
    insert into [tb1] select '教育+大学  ',12 
    if object_id('fn_ConvertKey') is not null drop function fn_ConvertKey 
     go 
    create function fn_ConvertKey
    (
        @key varchar(50)
    )
    returns varchar(50)
    as
    begin
        declare @name1 varchar(50),@name2 varchar(50),@result varchar(50)
        set @name1=rtrim(left(@key,charindex('+',@key)-1))
    set @name2=rtrim(stuff(@key,1,charindex('+',@key),'')) 
    if(@name1>@name2)
    set @result=@name2+'+'+@name1
    else
    set @result=@name1+'+'+@name2
        return @result
    endselect dbo.fn_ConvertKey([key]) as [key],Sum([count]) as [count] from [tb1]
    group by dbo.fn_ConvertKey([key])
      

  3.   

    select
        key_a+'+'+key_b as [key],sum([count]) as [count]
    from
        (select rtrim(left([key],charindex('+',[key])-1)) key_a,rtrim(stuff([key],1,charindex('+',[key]),'')) key_b,[count] from @t
         union all
         select rtrim(stuff([key],1,charindex('+',[key]),'')) key_b,rtrim(left([key],charindex('+',[key])-1)) key_a,[count] from @t) t
    where
        key_a>=key_b
    group by
        key_a,key_b
      

  4.   

    create table  #1 ([key] varchar(20),[count] int)
    insert into #1 select '大学+教育',5 
    insert into #1 select '计算机+书本',1 
    insert into #1 select '大学生+吃饭',3 
    insert into #1 select '书本+计算机',3 
    insert into #1 select '保安+学生',8 
    insert into #1 select '教育+大学',12 select 
    [key] = keya + keyb
    ,sum([count]) as [count]
    from 
    (
    select 
    keya = case when parsename(replace([key],'+','.'),2) > parsename(replace([key],'+','.'),1) then parsename(replace([key],'+','.'),2) else parsename(replace([key],'+','.'),1)  end 
    ,keyb = case when parsename(replace([key],'+','.'),2) < parsename(replace([key],'+','.'),1) then parsename(replace([key],'+','.'),2) else parsename(replace([key],'+','.'),1)  end 
    ,[count] 
    from #1
    ) t
    group by keya + keyb
    /*
    key                                                                                                                                                                                                                                                              count
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -----------
    大学生吃饭                                                                                                                                                                                                                          3
    教育大学                                                                                                                                                                                                                            17
    书本计算机                                                                                                                                                                                                                          4
    学生保安                                                                                                                                                                                                                            8(4 row(s) affected)*/
      

  5.   

    Create table #t ([key] varchar(20),[count] int)
    insert into #t select '大学+教育  ',5 
    insert into #t select '计算机+书本',1 
    insert into #t select '大学生+吃饭',3 
    insert into #t select '书本+计算机',3 
    insert into #t select '保安+学生  ',8 
    insert into #t select '教育+大学  ',12 
    select key_a+'+'+key_b as [key],sum([count]) as [count]
    from(select rtrim(left([key],charindex('+',[key])-1)) key_a,rtrim(substring([key],charindex('+',[key])+1,len([key]))) key_b,[count] from #t
    union all
    select rtrim(substring([key],charindex('+',[key])+1,len([key]))) key_a,rtrim(left([key],charindex('+',[key])-1)) key_b,[count] from #t)t
    where key_a<key_b
    group by key_a,key_bdrop table  #t
    /*
    吃饭+大学生 3
    大学+教育 17
    计算机+书本 4
    保安+学生 8
    */
      

  6.   

    问题解决,谢谢大家,我没有测试所有的代码.只测试了 duanze82 ,flairsky  可行