如何根据Oracle中的条件选择列值

克里希纳

我有一张要用来生成报告的表格。我可以传递参数值来调用另一个使用查询填充数据的报表。数据应根据我们通过的参数进行更改,其中基于参数值选择列值

这是我的样本输入和基于参数的预期输出。

输入表

id_val      name    flag_1   f1_val     flag_2   f2_val     flag_3   f3_val
1           USD      1          aa         0        gg            1    mm
2           CAD      0          bb         0        hh            0    nn
3           INR      1          cc         1        ii            0    oo
4           JPY      0          dd         1        jj            1    pp
5           EUR      1          ee         1        kk            1    qq
6           AUD      1          ff         1        ll            0    rr

根据参数值输出

如果参数= Flag1

name    flag   f_val
USD     1       aa
INR     1       cc
EUR     1       ee
AUD     1       ff

如果参数= Flag2

name    flag  f_val
INR     1      ii
JPY     1      jj
EUR     1      kk
AUD     1      ll

如果参数= Flag3

name    flag   f_val
USD     1       mm
JPY     1       pp
EUR     1       qq
巴巴罗斯·奥赞

您可能会轻松,干净地使用解码为:

select name,1 as flag,
            decode('&Parameter','Flag1',F1_val
                               ,'Flag2',F2_val
                               ,'Flag3',F3_val) as f_val
  from tab
 where decode('&Parameter','Flag1',Flag_1 
                          ,'Flag2',Flag_2
                          ,'Flag3',Flag_3) = 1;

假设'&Parameter'是一个字符串类型替换变量'Flag1'可以为其传递'Flag2''Flag3'

-- if '&Parameter' = 'Flag1'
NAME    FLAG    F_VAL
USD      1      aa
INR      1      cc
EUR      1      ee
AUD      1      ff

-- if '&Parameter' = 'Flag2'
NAME    FLAG    F_VAL
INR     1       ii
JPY     1       jj
EUR     1       kk
AUD     1       ll

-- if '&Parameter' = 'Flag3'
NAME    FLAG    F_VAL
USD     1       mm
JPY     1       pp
EUR     1       qq

Rextester演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章