我有一个非常详细的情况,比如标题的细节:
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)得到这样的东西
(rec加“+”)
1 | AA | 10 | 1
3 | CC | 25 | 1(评论及“-”)
2 | BB | -50 | 1但这当然不起作用.无法提取打开参数值的行
是否有一种方法可以将这种情况用作where条件(或联接),或者我需要两个分开的游标?
谢谢
发布于 2019-02-06 14:20:05
您的过程解决方案(传递变量)并不是解决这个问题的最佳方法,但是,要回答我在这里编写的proc中包含的SQL的具体问题,则不是最好的方法。同样,最终更好的解决实际问题的方法是使用一个带有适当order的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))发布于 2019-02-06 14:12:02
这对你有用吗?
select * from tbl
order by case when quantity > 0 then 1 else 0 end;如果你需要的话
select * from tbl where quantity < 0;
select * from tbl where quantity >=0;你也可以把他们结合起来
select * from tbl where quantity < 0 union
select * from tbl where quantity >=0;你也可以把它们标记成
select
case when quantity < 0 then '-' else '+' end sign,
tbl.*
from tbl 然后
select * from
(
select
case when quantity < 0 then '-' else '+' end sign,
tbl.*
from tbl
)
order by sign 发布于 2019-02-06 14:27:03
您的基本想法是可行的,您只需使用适当的和/或逻辑,而不是用大小写:
cursor rec (p_sign in char) is
select *
from details
where (p_sign = '+' AND quantity > 0) OR (p_sign = '-' AND quantity < 0)https://stackoverflow.com/questions/54555473
复制相似问题