一表  TableA  字段如下:
                   PartNO     Partname   
                     001         A
                     001         B
                     001         C
                     002         M
                     002         N
實現 :
                   PartNO     Partname
                     001       A+B+C
                     002        M+N
等候幫助!      
 

解决方案 »

  1.   

    你自己看看SQL语句中的SUM和COUNT功能,WHERE,GROUPBY吧,
    先给个语句吧(不一定对啊,好长时间没玩了)
    SELECT SUM(Partname) FROM TableA GROUPBY(PartNO)
      

  2.   

    select sum(Partname) from TableA group by(partNO)
      

  3.   

    Partname  是什么类型??
      

  4.   

    select PartNO,Partname = sum(Partname ) 
     from  TableA
     group by  PartNO
      

  5.   

    Partname  是什么类型??
    如果是numeric参照楼上的就可以了。
    如果是varchar之类的麻烦些
      

  6.   

    不好意思,沒有講明,字段Partname類型為char(30)
      

  7.   

    --测试CREATE TABLE tb3 (PartNO CHAR(3),Partname CHAR(10))
    INSERT INTO tb3
    SELECT '001','A'
    UNION ALL SELECT '001','B'
    UNION ALL SELECT '001','C'
    UNION ALL SELECT '002','D'
    UNION ALL SELECT '002','E'
    DECLARE @sql VARCHAR(3000),
            @count1 INT,
            @count2 INT,
            @id CHAR(10),
            @name VARCHAR(10),
            @partname VARCHAR(3000)
          SET @count1=1
    SET @count2=1
    SET @sql=''
    SET @name=''
    SET @partname=''
    DECLARE get_PartNO CURSOR
    FOR SELECT PartNO FROM tb3 GROUP BY PartNO
    OPEN get_PartNOWHILE @count1<=(SELECT COUNT(DISTINCT PartNO) FROM tb3)
    BEGIN
      FETCH get_PartNO INTO @id
      
      DECLARE get_name CURSOR
      FOR SELECT Partname FROM tb3 WHERE PartNO=@id
      OPEN get_name
      
      SET @partname=''
      SET @count2=1
      WHILE @count2<=(SELECT COUNT(Partname) FROM tb3 WHERE PartNO=@id)
      BEGIN
        FETCH get_name INTO @name
        SELECT @partname=@partname+@name+'+'
        SELECT @count2=@count2+1
      END
      DEALLOCATE get_name  
     
      SELECT @partname=SUBSTRING(@partname,1,len(@partname)-1)  SELECT @sql=@sql+' UNION '
      SELECT @sql=@sql+'SELECT PartNO,'+'('''+@partname+''') AS Partname FROM tb3 WHERE PartNO='+@id
      SELECT @count1=@count1+1
    ENDSELECT @sql=SUBSTRING(@sql,8,len(@sql)-7)
    DEALLOCATE get_PartNOEXEC(@sql)--结果PartNO   Partname 
    001 A         +B         +C         
    002 D         +E         
      

  8.   

    PartNO   Partname 
    001 A         +B         +C         
    A,B,C的顺序有没有要求?没要求简单
      

  9.   

    楼主看到可与我联系[email protected]
      

  10.   

    select distinct PartNO,     sum(Partname ) from    TableA  
    group by PartNO
      

  11.   

    剛剛去拔河了,2:1 贏了!真怪 。 第一局我上了,輸了。以下兩局我沒有上,贏了!  sunboy19(sunboy19)謝謝老兄!  A,B,C是有順序的
                     PartNO     Partname   order
                         001         A       1
                         001         B       3
                         001         C       2
                         002         M       2
                         002         N       1   實現            PartNO     FullPartname   
                         001         A+C+B
                         002         N+M                orer 為int 按其進行排序!
     
                     
      
      

  12.   

    俺也想帮你,可是俺也不会,只有帮你ding了
      

  13.   

    With Data.QUERY1  do
       begin
       close ;
       sql.Clear ;
       sql.Add('select count(*) 张数,sum(cast(timelen as numeric(10))) 秒数,tel 字头 from hd'+Edit1.Text+' group by tel order by 1') ;
       open ;
       end ;这是我的原代码,一定能帮你的。
    select PartNO,sum(cast(Partname as numeric(10))) Partname
    from  TableA
    Group by PartNO
      

  14.   

    我的partname中的內容是  MM,MC,FG,EEM 等字段  
                   按照加工順序order  實現
                       partno          newpartname
                         001              MM+MC      (舉例,如果001有兩個工程,按其order排序)
                         002              MM+MC+FG
    不好意思了,這次我說明白了!   也就是說,partname 字段是char(10)  ,如果是int,我自己解決算了!
      

  15.   

    不好意思,这几天在外面出差,刚回来,现在就把例子发给你,你看一下,不懂的地方再联系
    create table #PartA(PartNo varchar(10), PartName char(10))
    insert into #PartA
    select PartNo, ''
    from #Part 
    group by PartNo 
    order by PartNoselect IDENTITY(int,1,1) BID, PartNo, PartName, OrderID into #PartB
    from #Part
    order by PartNo, OrderIDdeclare @nID int, @sPartNo varchar(10), @sPartName varchar(10)
    select Top 1 @sPartName = PartName, @sPartNo = PartNo from #PartB
    select @nID = 1
    while exists(select BID from #PartB)
    begin
    delete #PartB where BID = @nID
    update #PartA set PartName = PartName + @sPartName
    where PartNo = @sPartNo

    select Top 1 @sPartName = PartName, @sPartNo = PartNo from #PartB
    select @nID = @nID + 1
    end
    select * from #PartA order by PartNodrop table #PartA
    drop table #PartB
      

  16.   

    支持luke5678(奇异) 
       
         游标没什么问题啊, 如果用的太多是会耗资源,2万条记录,和临时表差不多的!奇异的方法就对了,还关注什么啊关注!
      

  17.   

    sunboy19(sunboy19)  出錯 sql沒有字符型數據相加的嗎?
      

  18.   

    Function AddPartname(@partNo varchar(12))
    returns varchar
    as
     declare @str varchar(3000)
    begin
      set @str=''
     select @str=@str+'+'+partname from TableA where PartNo=@partNo
           set @str=substring(@str,2,len(@str)
           return @str
    endselect distinct PartNo,AddPartname(Partname) from TableA
      

  19.   

    使用临时表变量,方法应该都大同小异to chinaandys 您的方法应该不行吧?函数中只能取到第一行的值,而且其里面的变量怎么能够累加呢?
      

  20.   

    测试OK:use tempdb
    go
    Create Function F_str(@partno varchar(3000))
    returns varchar(3000)
    as
    begin
    declare @Str varchar(3000)
    set @Str=''
    select @Str=@Str+'+'+Partname From tablea where PartNo=@partno
    return(substring(@Str,2,len(@Str)))
    end
    go------------------------------
    select distinct partno,Partname=dbo.F_Str(partno) from tablea
    -----------------------
    001 A+B+C
    002 M+N
      

  21.   

    delphfan(AMU) ,有了group by,就不用在distinct了,再用就重复了,起不到效果。而且distinct会加重服务器负担
      

  22.   

    To fan178(黄客)            如果建立了索引后,你就不会这么认为了?
      

  23.   

    select PartNO,sum(Partname) from tablea group by partno
      

  24.   

    select PartNO,Partname = sum( Partname ) from  TableA group by  PartNO
    应该没错吧.
      

  25.   

    select PartNO,Partname = sum(Partname ) 
     from  TableA
     group by  PartNO
    要求PartName必须是能加的数据库类型!
      

  26.   

    测试OK:use tempdb
    go
    Create Function F_str(@partno varchar(3000))
    returns varchar(3000)
    as
    begin
    declare @Str varchar(3000)
    set @Str=''
    select @Str=@Str+'+'+Partname From tablea where PartNo=@partno
    return(substring(@Str,2,len(@Str)))
    end
    go------------------------------
    select distinct partno,Partname=dbo.F_Str(partno) from tablea
    -----------------------
    001 A+B+C
    002 M+N
      

  27.   

    chinaandys(天煞孤星&&蛋炒饭) 謝謝老兄  不過-----           guanli    PartNO     Partname   
                2000     001         A
                2000     001         B
                2001     001         C
                2002     002         M
                2002     002         N
    實現 :
                guanli  PartNO     Partname
                 2000    001         A+B
                 2001    001          C
                 2002    002         M+N可否實現 ?謝謝了!  一會結帖,分數雖然少,但見大家熱情,和小生一點心意!謝謝大家了! 
      

  28.   

    yimibaer(别人笑我看不穿,我笑别人太疯癫) (
    我的例子会出错吗?应该没问题吧,我这边测试过了
      

  29.   

    再幫忙 chinaandys(天煞孤星&&蛋炒饭) 我看到曙光了!
      

  30.   

    楼主大佬注意看我答案(SQL SERVER常用建立函数)
    Create Function F_str(@guanli varchar(3000))
    returns varchar(3000)
    as
    begin
    declare @Str varchar(3000)
    set @Str=''
    select @Str=@Str+'+'+Partname From tablea where guanli=@guanli
    return(substring(@Str,2,len(@Str)))
    end
    go
    select distinct guanli,partno, guanli=dbo.F_Str(guanli) from tablea
      

  31.   

    2000 001 A+B
    2001 001 C
    2002 002 M+N
      

  32.   

    你的代碼我跑了,花去了8分34秒  紀錄有13784 我仔細查過 partname 中的結果集 有些為不正確的
       譬如應該  guanli  PartNO     Partname 
                  2000    001         A+B
                  2001    001          C
                  2002    002         M+N             guanli  PartNO     Partname 
                  2000    001         A+B+(不該加的)
                  2001    001          C+(不該加的)
                  2002    002         M+N+(不該加的)我沒有查到原因 ,紀錄結果前幾乎都為正確,後面正確的就少了
      

  33.   

    自定义局和函数--------测试表
    create table Test
    (F1 varchar(10),
     F2 varchar(10))
    --插入数据
    insert into Test 
    select 'jack' F1,'book1' F2
    union
    select 'jack' F1,'book2' F2
    union
    select 'jack' F1,'book3' F2
    union
    select 'Mary' F1,'book4' F2
    union
    select 'Mary' F1,'book5' F2
    union
    select 'Mike' F1,'book1' F2
    union
    select 'Mike' F1,'book5' F2
    union
    select 'Mike' F1,'book7' F2
    union
    select 'Mike' F1,'book9' F2
    --一条动态SQL语句go
    --合并函数
    CREATE FUNCTION MergeCharField(@Group varchar(255))
    RETURNS varchar(8000)
    AS
    BEGIN
    DECLARE @r varchar(8000)
    SET @r=''
    SELECT @r=@r+'+'+rtrim(F2) FROM Test WHERE F1=@GroupRETURN(substring(@r,2,8000))
    END
    GO
    --调用
    select F1 [name],dbo.MergeCharField(F1) [book] from test group by F1
    --删除测试环境
    drop table test
    drop FUNCTION MergeCharFieldjack book1+book2+book3
    Mary book4+book5
    Mike book1+book5+book7+book9
      

  34.   

    jinjazz(近身剪(N-P攻略))   有兩個字段控制
        
                guanli  PartNO     Partname 
                  2000    001         A
                  2000    001         B
                  2001    001         C
                  2002    002         M
                  2002    002         N              guanli  PartNO     Partname 
                  2000    001         A+B
                  2001    001          C
                  2002    002         M+N
      

  35.   

    --测试表
    create table Test
    (guanli varchar(10),
     PartNO varchar(10),
     Partname varchar(10))
    go
    --插入数据
    insert into Test 
    select '2000' guanli,'001' PartNO,'A' Partname
    union
    select '2000' guanli,'001' PartNO,'B' Partname
    union
    select '2001' guanli,'001' PartNO,'C' Partname
    union
    select '2002' guanli,'002' PartNO,'M' Partname
    union
    select '2002' guanli,'002' PartNO,'N' Partnamego--合并函数
    CREATE FUNCTION MergeCharField(@Group1 varchar(255),@Group2 varchar(255))
    RETURNS varchar(8000)
    AS
    BEGIN
    DECLARE @r varchar(8000)
    SET @r=''
    SELECT @r=@r+'+'+rtrim(Partname) FROM Test WHERE guanli=@Group1 and PartNO=@Group2
    RETURN(substring(@r,2,8000))
    END
    GO--调用
    select guanli, PartNO,dbo.MergeCharField(guanli,PartNO) as Partname from test group by guanli, PartNO--删除测试环境
    drop table test
    drop FUNCTION MergeCharField 
      

  36.   

    2000 001 A+B
    2001 001 C
    2002 002 M+N
      

  37.   

    我不能发帖子!我是菜鸟!跪求!还原精灵转存大师!"还原精灵转存大师",实际上是先读出转存密码(明文,内存地址固定),然后将还原精灵的转存界面调出来,然后用SetText将密码输入,再用程序控制鼠标去点那个转存.也就是说,实际上是使用还原精灵自己的转存功能.如果你懒得去敲打代码,干脆直接将这些操作用一个软件将它录制下来,然后先把用户电脑屏幕变黑(用意在于不让用户看到你的鼠标在屏幕上点那个转存按钮) 我只知道这样 请那位大虾帮忙!!!!用DELPHI7语言给我写个原玛
    小弟 在线等 也可以加我QQ313739427 我在线等!!!!!!谢谢!!!
      

  38.   

    tcyellow(大宝),
    我是新手,对索引这些还不清楚,你能举个例子吗?
      

  39.   

    http://community.csdn.net/Expert/TopicView2.asp?id=3580679&datebasetype
    lk
      

  40.   

    欢迎加入Borland 一线程序员,参与群里技术讨论!欢迎女孩子,也欢迎男孩子参与技术讨论!群号15154361