怎样在查询语句中加入判断语句?

pgz_007 2008-05-13 05:00:42
我想在查询列中出现材料平均单价这个列,不过这个列有两种计算方法,如下:
-------------------------------------------------------------------
if 【初始库存数量(kcsl)+入库数量(rksl)-出库数量(cksl)】<>0

平均单价(pjdj)=【初始库存金额(kcje)+入库金额(rkje)-出库金额(ckje)】/【初始库存数量(kcsl)+入库数量(rksl)-出库数量(cksl)】

if 【初始库存数量(kcsl)+入库数量(rksl)-出库数量(cksl)】=0

平均单价(pjdj)=出库金额(ckje)/出库数量(cksl)
-------------------------------------------------------------------

select clbhid,kcsl,kcje,rksl,rkje,cksl,ckje,pjdj=(kcje+rkje-ckje)/(kcsl+rksl-cksl) from temptable

查询语句见上,不过现在单价有两种计算方法,我该怎么做?怎样在查询中加入if else?
...全文
162 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
LIHY70 2008-05-14
  • 打赏
  • 举报
回复

select clbhid,kcsl,kcje,rksl,rkje,cksl,ckje,pjdj=case when kcsl+rksl-cksl<>0 then (kcje+rkje-ckje)/(kcsl+rksl-cksl) else (case when cksl<>0 then ckje/cksl else 0 end ) end
from temptable
swot2008 2008-05-14
  • 打赏
  • 举报
回复
case
Limpire 2008-05-14
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 pgz_007 的回复:]
我是楼主,我按照你们的方法出现这样的错误提示:出现被零除错误
请问这是怎么回事?
[/Quote]


select clbhid,kcsl,kcje,rksl,rkje,cksl,ckje,
pjdj=
case kcsl+rksl-cksl
when 0 then ckje/nullif(cksl,0)
else (kcje+rkje-ckje)/nullif(kcsl+rksl-cksl,0))
end
from temptable
Herb2 2008-05-14
  • 打赏
  • 举报
回复
/******************************************/
/*回复:代码20080514004 总:00000000013 */
/*主题:怎样在查询语句中加入判断语句 */
/*作者:二等草 */
/******************************************/

/************例子数据 begin****************/

/************例子数据 end******************/

/************代码 begin***************/
select clbhid,kcsl,kcje,rksl,rkje,cksl,ckje,
pjdj=case when kcsl+rksl-cksl<> 0 then (kcje+rkje-ckje)/(kcsl+rksl-cksl)
when cksl <> 0 then ckje/cksl
else 0 end
from temptable
/************代码 end*****************/

/************结果 begin***************

************结果 end*****************/

/************清除*************************/
fuda_1985 2008-05-14
  • 打赏
  • 举报
回复
除法运算中被除数不能为零,这小学的时候都教过的!你不判断如果它为零,不报错才怪啊。
fuda_1985 2008-05-14
  • 打赏
  • 举报
回复
select clbhid,kcsl,kcje,rksl,rkje,cksl,ckje,pjdj=
case when (kcsl+rksl-cksl)<>0 and (kcsl + rksl - cksl)<>0
then (kcje + rkje - ckje )/(kcsl + rksl - cksl)
when (kcsl+rksl-cksl)=0 and cksl<>0
then ckje / cksl end
from temptable
lxuan_025 2008-05-14
  • 打赏
  • 举报
回复
加入case when语句就行了,插入 if else 太麻烦了。
pgz_007 2008-05-13
  • 打赏
  • 举报
回复
可以再加个case吗?判断cksl=0的情况
pgz_007 2008-05-13
  • 打赏
  • 举报
回复
where cksl>0 不能加这个条件,我这个查询是允许它为零的
pgz_007 2008-05-13
  • 打赏
  • 举报
回复

----------------
select clbhid , kcsl , kcje , rksl , rkje , cksl , ckje ,
pjdj = case when kcsl + rksl - cksl <> 0
then (kcje + rkje - ckje )/(kcsl + rksl - cksl)
else ckje / cksl
end
from temptable

服务器: 消息 8134,级别 16,状态 1,行 92
遇到被零除错误。
--------------------
请问怎么回事?

-
csdnshao 2008-05-13
  • 打赏
  • 举报
回复
select clbhid,kcsl,kcje,rksl,rkje,cksl,ckje, pjdj=case kcsl+rksl when 0 then 0 else (kcje+rkje)/(kcsl+rksl) end from temptable
where cksl=0
union

select clbhid,kcsl,kcje,rksl,rkje,cksl,ckje, pjdj=case kcsl+rksl-cksl when 0 then ckje/cksl else (kcje+rkje-ckje)/(kcsl+rksl-cksl) end from temptable
where cksl>0
csdnshao 2008-05-13
  • 打赏
  • 举报
回复
select clbhid,kcsl,kcje,rksl,rkje,cksl,ckje, pjdj=case kcsl+rksl-cksl when 0 then 0 else (kcje+rkje-ckje)/(kcsl+rksl-cksl) end from temptable
where cksl=0
union

select clbhid,kcsl,kcje,rksl,rkje,cksl,ckje, pjdj=case kcsl+rksl-cksl when 0 then ckje/cksl else (kcje+rkje-ckje)/(kcsl+rksl-cksl) end from temptable
where cksl>0

csdnshao 2008-05-13
  • 打赏
  • 举报
回复
cksl = 0
dawugui 2008-05-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 pgz_007 的回复:]
我是楼主,我按照你们的方法出现这样的错误提示:出现被零除错误
请问这是怎么回事?
[/Quote]

kcsl + rksl - cksl = 0
cksl = 0
pgz_007 2008-05-13
  • 打赏
  • 举报
回复
我是楼主,我按照你们的方法出现这样的错误提示:出现被零除错误
请问这是怎么回事?
Limpire 2008-05-13
  • 打赏
  • 举报
回复
select clbhid,kcsl,kcje,rksl,rkje,cksl,ckje, pjdj=case kcsl+rksl-cksl when 0 then ckje/cksl else (kcje+rkje-ckje)/(kcsl+rksl-cksl) end from temptable
dawugui 2008-05-13
  • 打赏
  • 举报
回复
select clbhid , kcsl , kcje , rksl , rkje , cksl , ckje ,
pjdj = case when kcsl + rksl - cksl <> 0
then (kcje + rkje - ckje )/(kcsl + rksl - cksl)
else ckje / cksl
end
from temptable
dawugui 2008-05-13
  • 打赏
  • 举报
回复
select clbhid,kcsl,kcje,rksl,rkje,cksl,ckje,
pjdj = case when 【初始库存数量(kcsl)+入库数量(rksl)-出库数量(cksl)】 <> 0
then 【初始库存金额(kcje)+入库金额(rkje)-出库金额(ckje)】/【初始库存数量(kcsl)+入库数量(rksl)-出库数量(cksl)】
else 出库金额(ckje)/出库数量(cksl)
end
from temptable
chuifengde 2008-05-13
  • 打赏
  • 举报
回复
select clbhid,kcsl,kcje,rksl,rkje,cksl,ckje,
pjdj=case when kcsl+rksl-cksl<>0 then (kcje+rkje-ckje)/(kcsl+rksl-cksl)
else ckje/cksl end
from temptable
liangCK 2008-05-13
  • 打赏
  • 举报
回复
select case 
when kcsl+rksl-cksl<>0 then (kcje+rkje-ckje)/(kcsl+rksl+cksl)
when xxx then xxx
end 平均单价
from tb
加载更多回复(2)

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧