round(CAST(
(CASE WHEN 计款方式 = '收费' THEN
CASE WHEN dbo.客户.下订单 = '-1' THEN
CASE WHEN 正品 + 备品 > PO量 THEN
round(PO量 * CAST(COALESCE (round(dbo.送货单明细.单价,3),0) AS NUMERIC(10, 3)), 3)
ELSE
round((正品 + 备品)* CAST(COALESCE (round(dbo.送货单明细.单价, 3),0) AS NUMERIC(10, 3)), 3)
END ELSE
round((dbo.送货单明细.正品 + 备品)* CAST(COALESCE (round(dbo.送货单明细.单价, 3),0) AS NUMERIC(10, 3)),3)
END ELSE 0 END)
AS numeric(10, 3)),3) AS 应收金额
有个查询时这样的,我想加个条件是
Case when 进出性质.性质名称='样板(收费)A' THEN
round(dbo.送货单明细.单价, 3)
即当性质='样板(收费)A'时, 单价等于应收金额
---------------------------------
round(CAST(
(CASE WHEN 计款方式 = '收费' THEN
CASE WHEN dbo.客户.下订单 = '-1' THEN
CASE WHEN 正品 + 备品 > PO量 THEN
Case when 进出性质.性质名称='样板(收费)A' then
round(PO量 * CAST(COALESCE (round(dbo.送货单明细.单价,3),0) AS NUMERIC(10, 3)), 3)
ELSE
round((正品 + 备品)* CAST(COALESCE (round(dbo.送货单明细.单价, 3),0) AS NUMERIC(10, 3)), 3)
END ELSE
round((dbo.送货单明细.正品 + 备品)* CAST(COALESCE (round(dbo.送货单明细.单价, 3),0) AS NUMERIC(10, 3)),3)
End else
round(dbo.送货单明细.单价, 3)
END ELSE 0 END)
AS numeric(10, 3)),3) AS 应收金额
这么写,怎么不是那性质的条件也按单价算应收金额了啊?
(CASE WHEN ...THEN
CASE WHEN ...THEN 这样镶套的意思,我看不懂这个
if 计款方式 = '收费' and dbo.客户.下订单 = '-1' and 正品 + 备品 > PO量 and 进出性质.性质名称='样板(收费)A'
round(PO量 * CAST(COALESCE (round(dbo.送货单明细.单价,3),0) AS NUMERIC(10, 3)), 3) 不知道是不是你期望的逻辑
(CASE WHEN 计款方式 = '收费' THEN
CASE WHEN dbo.客户.下订单 = '-1' THEN
CASE WHEN 正品 + 备品 > PO量 THEN
Case when 进出性质.性质名称='样板(收费)A' then
round(PO量 * CAST(COALESCE (round(dbo.送货单明细.单价,3),0) AS NUMERIC(10, 3)), 3)
ELSE
round((正品 + 备品)* CAST(COALESCE (round(dbo.送货单明细.单价, 3),0) AS NUMERIC(10, 3)), 3)
END ELSE
round((dbo.送货单明细.正品 + 备品)* CAST(COALESCE (round(dbo.送货单明细.单价, 3),0) AS NUMERIC(10, 3)),3)
End else
round(dbo.送货单明细.单价, 3)
END ELSE 0 END)
AS numeric(10, 3)),3) AS 应收金额
CASE WHEN 计款方式 = '收费' THEN
CASE WHEN dbo.客户.下订单 = '-1' THEN
CASE WHEN 正品 + 备品 > PO量 THEN
与下面else是一一对应?
如果是,一楼我做的修改为什么不得3楼不是我想要的,4楼结构是清晰,但这里没解释一楼的问题
case when then else end
...
end
1.计款方式 <> '收费' --> 金额=0
2.计款方式 = '收费' --> 金额=公式A
2.1 进出性质.性质名称='样板(收费)A' --> 金额=公式B
2.2 进出性质.性质名称<>'样板(收费)A' -->2.3\2.4
2.3 dbo.客户.下订单 = '-1' --> 金额=公式C
2.4 正品 + 备品 > PO量 --> 金额=公式D
这么说条件2,岂不是要输出两个金额?
应该
1.计款方式 <> '收费' --> 金额=0
2.计款方式 = '收费'
2.1 进出性质.性质名称='样板(收费)A' --> 金额=公式B
2.2 进出性质.性质名称<>'样板(收费)A' -->2.3\2.4 //这里需使用,2.3,2.4计算出来的值,再一层的嵌套
2.3 dbo.客户.下订单 = '-1' --> 金额=公式C
2.4 正品 + 备品 > PO量 --> 金额=公式D
2.5 else --> 金额=公式
吧!
大致意思是不是这样的!
case when 计款方式 <> '收费' then 0
when 计款方式 = '收费' then
case when 进出性质.性质名称='样板(收费)A then round(PO量 * CAST(COALESCE (round(dbo.送货单明细.单价,3),0) AS NUMERIC(10, 3)), 3)
else
(case when dbo.客户.下订单 = '-1' then 公式C end)/(case when 正品 + 备品 > PO量 then 公式C end)
end
end
--伪码
case when 计款方式 <> '收费' then 0
when 计款方式 = '收费' then
case when 进出性质.性质名称='样板(收费)A' then 公式B
else
(case when dbo.客户.下订单 = '-1' then 公式C end)/(case when 正品 + 备品 > PO量 then 公式C end)
end
end
看一下联机丛书吧,里面太详细了
计算条件列表并返回多个可能结果表达式之一。
CASE 表达式有两种格式:
CASE 简单表达式将某个表达式与一组简单表达式进行比较以确定结果。
CASE 搜索表达式计算一组布尔表达式以确定结果。
两种格式都支持可选的 ELSE 参数。