首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle sql与case连接时

Oracle sql与case连接时
EN

Stack Overflow用户
提问于 2019-02-06 14:04:32
回答 3查看 81关注 0票数 1

我有一个非常详细的情况,比如标题的细节:

代码语言:javascript
复制
pk | desc | quantity | fkHeader
1  | AA   | 10       |  1
2  | BB   | -50      |  1
3  | CC   | 25       |  1

我需要先提取负数行,然后用正数提取行,所以我想使用光标,并将符号号('+‘o '-')作为参数传递给它。

像这样的东西

代码语言:javascript
复制
cursor rec (p_sign in char) is
  select * 
    from details
   where (case when p_sign = '+' then quantity > 0 else quantity < 0 end)

得到这样的东西

(rec加“+”)

代码语言:javascript
复制
1 | AA | 10 | 1
3 | CC | 25 | 1

(评论及“-”)

代码语言:javascript
复制
2 | BB | -50 | 1

但这当然不起作用.无法提取打开参数值的行

是否有一种方法可以将这种情况用作where条件(或联接),或者我需要两个分开的游标?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-02-06 14:20:05

您的过程解决方案(传递变量)并不是解决这个问题的最佳方法,但是,要回答我在这里编写的proc中包含的SQL的具体问题,则不是最好的方法。同样,最终更好的解决实际问题的方法是使用一个带有适当order的sql语句。

不能在case表达式中返回条件。相反,您需要在这里变得有点棘手:

代码语言:javascript
复制
WHERE CASE WHEN p_sign='+' THEN quantity ELSE quantity * -1 END < 0

但是,如果按照@jarlh在注释中的建议使用and/or逻辑,则会更清楚:

代码语言:javascript
复制
WHERE ((p_sign='+' AND quantity > 0) OR (p_sign<>'+' AND quantity < 0))
票数 1
EN

Stack Overflow用户

发布于 2019-02-06 14:12:02

这对你有用吗?

代码语言:javascript
复制
select * from tbl
order by case when quantity > 0 then 1 else 0 end;

如果你需要的话

代码语言:javascript
复制
select * from tbl where quantity < 0;
select * from tbl where quantity >=0;

你也可以把他们结合起来

代码语言:javascript
复制
select * from tbl where quantity < 0 union
select * from tbl where quantity >=0;

你也可以把它们标记成

代码语言:javascript
复制
select 
  case when quantity < 0 then '-' else '+' end sign, 
  tbl.* 
from tbl 

然后

代码语言:javascript
复制
select * from 
(
  select 
    case when quantity < 0 then '-' else '+' end sign, 
    tbl.* 
  from tbl 
) 
order by sign 
票数 1
EN

Stack Overflow用户

发布于 2019-02-06 14:27:03

您的基本想法是可行的,您只需使用适当的和/或逻辑,而不是用大小写:

代码语言:javascript
复制
cursor rec (p_sign in char) is
  select * 
    from details
   where (p_sign = '+' AND quantity > 0) OR (p_sign = '-' AND quantity < 0)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54555473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档