表a数据如下:
a  b   c
1  1   R
1  1   RW
1  1   D
1  2   R
1  2   D
1  3   D
得到的结果:
a  b  D  V
1  1  1  1
1  2  1  1
1  3  0  1规则是:
1,如果A,B相同,当C IN('R','RW') THEN V="1"
                 当D IN('D') THEN D='1'
2,不要使用游标或是按行处理的方法,因为资料量太大了!

解决方案 »

  1.   

    select 
        A,
        B,
        max(case when C IN('R','RW') then '1' else '0' end) as V,
        max(case when C='D' then '1' else '0' end) as D
    from
        tName
    group by
        A,B
      

  2.   

    是,你是正确的,刚才有使用过这样的方法,但是在group by的时候,多写了C这个field!所以结果出不来!多谢了!
    那么,如果想要实现这样的结果要怎么做呢?得到的结果:
    a  b  C
    1  1  R;RW;D
    1  2  R;D
    1  3  D
    规则:
    1,当a,b相同时,将C Columns用';'串起来
    2,同样不能使用游标或是按行处理的方法thanks!
      

  3.   

    select a,b,(when D IN('D') THEN '1' end) d,(case when C IN('R','RW') THEN "1" end) v
    from a
      

  4.   

    create function f_str (@colA varchar(10),@colB varchar(10)) returns varchar(8000) as 
    bengin
        declare @str varchar(8000)
        set @str=''
        select @str=@str+','+C from TableName where  A=@colA and B=@colB
        return @str
    endselect a,b,dbo.f_str(a,b) as c from TableName group by a,b
      

  5.   

    参考这个:--生成测试数据
    create table 表(部门 int,人员 varchar(20))
    insert into 表 select 1,'张三'
    insert into 表 select 1,'李四'
    insert into 表 select 1,'王五'
    insert into 表 select 2,'赵六'
    insert into 表 select 2,'邓七'
    insert into 表 select 2,'刘八'
    go--创建用户定义函数
    create function f_str(@department int)
    returns varchar(8000)
    as
    begin
        declare @ret varchar(8000)
        set @ret = ''
        select @ret = @ret+','+人员 from 表 where 部门 = @department
        set @ret = stuff(@ret,1,1,'')
        return @ret 
    end
    go
    --执行
    select 部门,人员=dbo.f_str(部门) from 表 group by 部门 order by 部门
    go--输出结果
    /*
    部门  人员
    ----  --------------
    1     张三,李四,王五
    2     赵六,邓七,刘八
    */
    --删除测试数据
    drop function f_str
    drop table 表
    go
      

  6.   

    create function f_str (@colA varchar(10),@colB varchar(10)) returns varchar(8000) as 
    bengin
        declare @str varchar(8000)
        set @str=''
        select @str=@str+','+C from TableName where  A=@colA and B=@colB
        set @str = stuff(@str,1,1,'')
        return @str
    endselect a,b,dbo.f_str(a,b) as c from TableName group by a,b
      

  7.   

    create function dbo.addcol(@a varchar(10),@b varchar(10))
    returns varchar(100)
    as
    begin
        declare @entry varchar(100)
        select @entry=null
        select @entry=coalesce(@entry+';','')+c from testA where a= @a and b= @b
        return @entry
    end
    goselect * from testA
    select a, b, dbo.addcol(a,b) from testA group by a,b
    drop function dbo.addcol
      

  8.   

    上面的那种做法也是可以的,主要使用了coalesce.