man字段:形如 a-man,b-man(最多5个人,最少1个人)
score字段:形如 3,2(与man一一对应)现在想要统计所有记录里某个man的总得分,应该怎么处理好呢?我自己的想法是:取到所有记录集dr
while(dr.read())
{
  获取某人在man字段的位置i
  根据i取得score字段的对应字符,并累加给变量 score
}不知道还有没有其他比较方便的做法呢?

解决方案 »

  1.   

    select man,sum(score) from table group by man
      

  2.   

    可以按照1楼的做法吗?我的score字段是nvarchar,且含有逗号啊...
      

  3.   

    man字段
    a-man
    b-man
    。。
    。。
    是这样的吗?
      

  4.   

    请参考下例:表: 
    ID(自动增加的)     作者                             机构                                 刊名 
    1                             A,B,C                       D,E,F                         XX 
    2                             H,J,F,I                   Z,Y,W,V                     YY 
    依次类推,作者跟机构可能是2个,或者是3个,没规律 
    我想要实现的功能是: 
    作者                         机构                                         刊名 
    A                           D                                         XX 
    B                           E                                         XX 
    C                           F                                         XX 
    H                           Z                                         YY 
    J                           Y                                         YY 
    F                           W                                         YY 
    I                           V                                         YY 
    数据量大概是20W   条左右,我该怎么实现呢? 
    谢谢您!
    CREATE TABLE tb(ID int,作者 varchar(10),机构 varchar(20),刊名 varchar(10))
    INSERT into tb values(1,'A,B,C',  'D,E,F'  ,'XX') 
    INSERT into tb values(2,'H,J,F,I','ZZ,YY,WWW,VVVV','YY') 
    go
    -- 建立一个辅助的临时表就可以了
    SELECT TOP 8000 id = identity(int,1,1) INTO tmp FROM syscolumns a, syscolumns b   select t1.作者,t2.机构,t1.刊名 from
    (
      select px=(select count(1) from 
      (
        SELECT A.ID, b.id bid,作者 = SUBSTRING(A.作者, B.ID, CHARINDEX(',', A.作者 + ',', B.ID) - B.ID),A.刊名 FROM tb A, tmp B WHERE SUBSTRING(',' + A.作者, B.id, 1) = ','
      ) m where id=t.id and bid<t.bid)+1 , * from 
      (
        SELECT A.ID, b.id bid,作者 = SUBSTRING(A.作者, B.ID, CHARINDEX(',', A.作者 + ',', B.ID) - B.ID),A.刊名 FROM tb A, tmp B WHERE SUBSTRING(',' + A.作者, B.id, 1) = ','
      ) t
    ) t1,
    (
      select px=(select count(1) from 
      (
        SELECT A.ID, b.id bid,机构 = SUBSTRING(A.机构, B.ID, CHARINDEX(',', A.机构 + ',', B.ID) - B.ID) FROM tb A, tmp B WHERE SUBSTRING(',' + A.机构, B.id, 1) = ','
      ) m where id=t.id and bid<t.bid)+1 , * from 
      (
        SELECT A.ID, b.id bid,机构 = SUBSTRING(A.机构, B.ID, CHARINDEX(',', A.机构 + ',', B.ID) - B.ID) FROM tb A, tmp B WHERE SUBSTRING(',' + A.机构, B.id, 1) = ','
      ) t
    ) t2
    where t1.id = t2.id and t1.px = t2.px
    order by t1.id , t1.pxDROP TABLE tb,tmp/*
    作者         机构                   刊名         
    ---------- -------------------- ---------- 
    A          D                    XX
    B          E                    XX
    C          F                    XX
    H          ZZ                   YY
    J          YY                   YY
    F          WWW                  YY
    I          VVVV                 YY(所影响的行数为 7 行)
    */
      

  5.   

    我的表大致是这样的:           man                score 
    记录1    a,b,c,d           1,2,5,1 
    记录2    b,c               2,3 
    记录3    c,a,b             2,3,1