我写的语句如下:
SELECT a.LOGID,
       a.LOGNAME,
       total=(
              SELECT isnull(sum(b.LOG_TOTAL),0) 
              FROM dbo.LOG_TOTAL as b
              where a.LOGID=b.LOGID
                --问题在这句
                and b.MODE=CASE a.MODE WHEN 'HE' THEN 'H' WHEN 'HT' THEN 'H' WHEN 'HM' THEN 'H' ELSE 'G' END
             ),
               
             CASE a.MODE WHEN 'HE' THEN 'H' WHEN 'HT' THEN 'H' WHEN 'HM' THEN 'H' ELSE 'G' END
               
FROM LOG as a
         GROUP BY a.LOGID,a.LOGNAME,
                 CASE a.MODE WHEN 'HE' THEN 'H' WHEN 'HT' THEN 'H' WHEN 'HM' THEN 'H' ELSE 'G' END
也就是说 MODE字段在两个表里面都有,但保存的参数不一样,我使用case来使得LOG表的MODE字段和LOG_TOTAL字段内容一致但是执行过程中报错
错误为sql server内部错误
谢谢

解决方案 »

  1.   

    GROUP BY a.LOGID,a.LOGNAME,
                     CASE a.MODE WHEN 'HE' THEN 'H' WHEN 'HT' THEN 'H' WHEN 'HM' THEN 'H' ELSE 'G' END
    没有聚合函数,为什么要GROUP BY 
    把GROUP BY 里的CASE删除就好了
      

  2.   

    你的CASE可以这样写:
    CASE a.MODE 
         WHEN LIKE 'H_' THEN 'H' 
         ELSE 'G' 
    END
      

  3.   

    group by是必须的
    因为还有一些字段需要sum的,我忘了贴出来
    SELECT a.LOGID,
           a.LOGNAME,
           total=(
                  SELECT isnull(sum(b.LOG_TOTAL),0) 
                  FROM dbo.LOG_TOTAL as b
                  where a.LOGID=b.LOGID
                    --问题在这句
                    and b.MODE=CASE a.MODE WHEN 'HE' THEN 'H' WHEN 'HT' THEN 'H' WHEN 'HM' THEN 'H' ELSE 'G' END
                 ),
                   
                 CASE a.MODE WHEN 'HE' THEN 'H' WHEN 'HT' THEN 'H' WHEN 'HM' THEN 'H' ELSE 'G' END,
             sum(a.log_value_1),
             sum(a.log_value_2)
    FROM LOG as a
             GROUP BY a.LOGID,a.LOGNAME,
                     CASE a.MODE WHEN 'HE' THEN 'H' WHEN 'HT' THEN 'H' WHEN 'HM' THEN 'H' ELSE 'G' END
      

  4.   

    同意楼上,不需要group by
    不是b.LOG_TOTAL已经sum过了嘛
      

  5.   

    lalakid(梦想总是那么美好……) 
    case语句这样写也不对
      

  6.   

    total=sum (case when a.logid=b.logid and b.mode=(CASE a.MODE WHEN 'HE' THEN 'H' WHEN 'HT' THEN 'H' WHEN 'HM' THEN 'H' ELSE 'G' END) then b.log_total else 0 end)把那个total汇总改成这样
      

  7.   

    SELECT a.LOGID,
           a.LOGNAME,
           total=sum (case when b.mode=(CASE a.MODE WHEN 'HE' THEN 'H' WHEN 'HT' THEN 'H' WHEN 'HM' THEN 'H' ELSE 'G' END) then b.log_total else 0 end),
                   
                 CASE a.MODE WHEN 'HE' THEN 'H' WHEN 'HT' THEN 'H' WHEN 'HM' THEN 'H' ELSE 'G' END,
             sum(a.log_value_1),
             sum(a.log_value_2)
    FROM LOG as a
             left join dbo.LOG_TOTAL as b on a.LOGID=b.LOGID
             GROUP BY a.LOGID,a.LOGNAME,
                     CASE a.MODE WHEN 'HE' THEN 'H' WHEN 'HT' THEN 'H' WHEN 'HM' THEN 'H' ELSE 'G' END
      

  8.   

    如果是sqlserver2000,应该是补丁问题,打到几了,需要sp3以上
      

  9.   

    leiyingw(小雷) 
    早就SP4了呀,我去年就下载安装了