CASE 与SUM 的使用 SQL 语句

现在要根据case中条件的不同进行进行sum
Select CASE
WHEN YF_ZYFYMX.YFDW=YK_TYPK.BFDW THEN SUM(YK_YPCD.JHJG/YK_TYPK.YFBZ*YF_ZYFYMX.YPSL)
WHEN YF_ZYFYMX.YFDW<>YK_TYPK.BFDW THEN SUM(YK_YPCD.JHJG*YF_ZYFYMX.YPSL)
END AS JHJE
From YF_ZYFYMX , YK_YPCD,YK_TYPK Where
YF_ZYFYMX.YFSB =3 And YF_ZYFYMX.YPXH =YK_YPCD.YPXH
And YF_ZYFYMX.YPCD =YK_YPCD.YPCD And YF_ZYFYMX.JFRQ > '2011-4-30 23:59:59.000'
And YF_ZYFYMX.JFRQ <= '2011-5-31 23:59:59.000' And YF_ZYFYMX.YFSB =3;
但是这样写却无法执行,是错在哪里?该怎么修正?
这条SQL语句就是根据case中条件的不同,进行sum求和,但是求和出来的结果在同一列。
Select sum ( YF_ZYFYMX.YPSL *YK_YPCD.JHJG ) From YF_ZYFYMX ,
YK_YPCD Where YF_ZYFYMX.YFSB =3 And YF_ZYFYMX.YPXH =YK_YPCD.YPXH
And YF_ZYFYMX.YPCD =YK_YPCD.YPCD And YF_ZYFYMX.JFRQ > '2011-4-30 23:59:59.000'
And YF_ZYFYMX.JFRQ <= '2011-5-31 23:59:59.000' And YF_ZYFYMX.YFSB =3 ;
这是原来错误结果的语句,就是YK_YPCD.JHJG中这里还要细分,要在这里进行判断进行case,但是出来的结果只能有一个数字,用group by的话就不是所有的求和了。

已经自己弄好了:
Select sum ( YF_ZYFYMX.YPSL *(CASE
WHEN YK_TYPK.YPDW<>YK_TYPK.BFDW THEN YK_YPCD.JHJG/YK_TYPK.ZXBZ
WHEN YK_TYPK.YPDW=YK_TYPK.BFDW THEN YK_YPCD.JHJG
END ))
From YF_ZYFYMX , YK_YPCD,YK_TYPK
Where YF_ZYFYMX.YFSB =3 And YF_ZYFYMX.YPXH =YK_YPCD.YPXH
And YK_TYPK.YPXH=YF_ZYFYMX.YPXH AND YK_TYPK.YPXH=YK_YPCD.YPXH
And YF_ZYFYMX.YPCD =YK_YPCD.YPCD And YF_ZYFYMX.JFRQ > '2011-4-30 23:59:59.000'
And YF_ZYFYMX.JFRQ <= '2011-5-31 23:59:59.000' And YF_ZYFYMX.YFSB =3 ;

没有group by,你的条件用到的字段都需要在Group By里出现
select sum(case 1 then result1 when 2 then result2 end) as result from table group by ?
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-08
select sum(a)as nums into #temp from table1 where b=3 例如,该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集,该方法的使用格式
第2个回答  2011-06-08
你想按什么分组啊?没有group by 你怎么能弄出SUM?
你也可以不同列啊
select
case when 条件1 then 结果1 end as 列1,
case when 条件2 then 结果2 end as 列2......
第3个回答  2011-06-08
说不清楚为什么,但是我认为应该先写case语句,然后把结果当成子查询再进行sum
相似回答