score列是字符型的,怎么SUM?

解决方案 »

  1.   

    select a.name, a.tscore, b.cscore
    from (select distinct name, sum(cast(course as integer)) as course from deam where course in ('A', 'B') group by name) a, (select name, score as cscore from deam where course = 'C') b
    where a.name = b.name
      

  2.   

    select name,sum(score) where isnumber(score) group by name
      

  3.   

    建立测试环境
    create table aa
    (name varchar(20),
    course varchar(10),
    score varchar(10)
    )insert aa
    select 'Tom','A','80'
    union all
    select 'Tom','B','85'
    union all
    select 'Tom','C','良好'
    union all
    select 'Jimmy','B', '90'
    union all
    select 'Jimmy','A','95'
    union all
    select 'Jimmy','C','优秀'执行语句
    select name,sum(case when course='A' or course='B' then score else 0 end) as Tscore
    ,max((case when course='C' then score else '' end)) as Cscore 
    from aa
    group by name,course,score结果
    name     Tscore    Cscore
    Jimmy 185 优秀
    Tom 165 良好善后drop table aa
      

  4.   

    看我的 字符也一样 sum
      

  5.   

    select name,
        [total scroe]= sum(case when ISNUMERIC(score)= 1 then score else 0 end),
        [Tscore]=max(case when ISNUMERIC(score)= 0 then score else '' end)
    from test
    group by name
      

  6.   

    上边的语句拷错了哈 这个才正确
    select name,sum(case when course='A' or course='B' then score else 0 end) as Tscore
    ,max((case when course='C' then score else '' end)) as Cscore 
    from aa
    group by name
      

  7.   

    select name,sum(cast((case when course='C' then 0  else score end) AS decimal(10,2)))),max(case when course ='C' then score else 0 end)
    from dean
    group by name
      

  8.   

    刚才没注意sore字段都是字符,应该如下select name,sum(cast((case when course='C' then '0'  else score end) AS decimal(10,2)))),max(case when course ='C' then score else 0 end)
    from dean
    group by name
      

  9.   

    create table test
    (name varchar(20),
    course varchar(10),
    score varchar(10)
    )   insert into test
              select 'Tom','A','80'
    union all select 'Tom','B','85'
    union all select 'Tom','C','良好'
    union all select 'Jimmy','B', '90'
    union all select 'Jimmy','A','95'
    union all select 'Jimmy','C','优秀'select name,
        [tscroe]=isnull(sum(case when course='A' or course='B' then cast(score as numeric(6,2)) end ),0),
      [Cscore]=max(case when course='C' then score else '' end)
    from test
    group by name
      

  10.   

    建议用   zlp321002(职业-->烧人民币)   这位老兄写的,如果再加了course 或是 score 为 Null 时都不至于出错.