
CASE 与SUM 的使用 SQL 语句
现在要根据case中条件的不同进行进行sumSelectCASEWHENYF_ZYFYMX.YFDW=YK_TYPK.BFDWTHENSUM(YK_YPCD.JHJG/Y...
现在要根据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 ; 展开
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 ; 展开
4个回答
展开全部
没有group by,你的条件用到的字段都需要在Group By里出现
select sum(case 1 then result1 when 2 then result2 end) as result from table group by ?
select sum(case 1 then result1 when 2 then result2 end) as result from table group by ?
展开全部
select sum(a)as nums into #temp from table1 where b=3 例如,该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集,该方法的使用格式
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你想按什么分组啊?没有group by 你怎么能弄出SUM?
你也可以不同列啊
select
case when 条件1 then 结果1 end as 列1,
case when 条件2 then 结果2 end as 列2......
你也可以不同列啊
select
case when 条件1 then 结果1 end as 列1,
case when 条件2 then 结果2 end as 列2......
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
说不清楚为什么,但是我认为应该先写case语句,然后把结果当成子查询再进行sum
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |