我遇到这样的主从情况:标头的详细信息:
pk | desc | quantity | fkHeader
1 | AA | 10 | 1
2 | BB | -50 | 1
3 | CC | 25 | 1
我需要先提取数量为负的行,然后提取数量为正的行,所以我想使用游标并将其符号号('+'o'-')传递给它
像这样的东西
cursor rec (p_sign in char) is
select *
from details
where (case when p_sign = '+' then quantity > 0 else quantity < 0 end)
并得到这样的东西
(带“ +”号的记录)
1 | AA | 10 | 1
3 | CC | 25 | 1
(带“-”的记录)
2 | BB | -50 | 1
但这当然行不通..无法提取打开参数值的行
有没有一种方法可以将情况用作条件(或JOIN),或者我需要两个单独的游标?
谢谢
您的过程解决方案(传递变量)不是解决此问题的最佳方法,但是要专门回答有关我在此处编写的proc中包含的SQL的问题。同样,最终,针对您的实际问题的更好解决方案是使用正确顺序排序的单个sql语句。
您不能在case表达式中返回条件。相反,您将需要在这里变得有些棘手:
WHERE CASE WHEN p_sign='+' THEN quantity ELSE quantity * -1 END < 0
但是,如果您使用@jarlh在注释中建议的and
/or
逻辑,则将更加清楚:
WHERE ((p_sign='+' AND quantity > 0) OR (p_sign<>'+' AND quantity < 0))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句