Sql 在db2中使用Between时如何使用Case

Sql 在db2中使用Between时如何使用Case,sql,db2,Sql,Db2,我想根据SOA_值从表中检索角色。即,如果SOA_值介于100和500之间,则角色应为RSM。若SOA_值大于500,则角色应为TMM。SOA_值来自前端 ROLE CHANNEL PLG TRANTYPE SOA_VALUE ASM GT DETS TRANSFER 0 RSM GT DETS TRANSFER 100 TMM GT DETS TRA

我想根据SOA_值从表中检索角色。即,如果SOA_值介于100和500之间,则角色应为RSM。若SOA_值大于500,则角色应为TMM。SOA_值来自前端

ROLE    CHANNEL    PLG     TRANTYPE     SOA_VALUE
ASM       GT       DETS    TRANSFER     0    
RSM       GT       DETS    TRANSFER     100  
TMM       GT       DETS    TRANSFER     500  
例如:如果SOA_值是122,那么角色应该是RSM

请为我提供检索角色的任何建议/示例查询。谢谢。

请尝试以下操作:

 SELECT CHANNEL,PLG,TRANTYPE,SOA_VALUE
    FROM TABLE_X          
      WHERE ROLE = (CASE 
    WHEN (120 >= 100 AND 120 <=500) THEN 'RSM'
    WHEN 120 > 500 THEN 'TMM'
    ELSE NULL
                   end)
将120替换为上述SOA_值的字符串值

演示:

这个怎么样:

with t(input_soa_value) as (values 121) -- simulates input value
select role from table_x where soa_value = (
  select max(soa_value) from table_x, t where soa_value < input_soa_value
)

+1用于明确覆盖SOA_值<100的情况。希望OP也测试空值values@Rajaganesh上面的查询将根据表中可用的Soa_值提供记录和角色。正如我在上面所写的,我的要求有点不同。我从用户前端html文本框中获取SOA_值…我需要从SOA_主表中选择适当的角色。@Rajagnesh请完成以下场景…假设我从前端获得122以及channel/plg/trantype,然后在soa_主控中,我需要检查:122>0&122100&122500,然后是TMM。应根据同一表格中的角色、频道、plg、传输类型检索最大和最小值0100500…当然。我正在尝试这个。让我给你一个答案@谢谢你的帮助…它解决了我的问题…实际上我正在寻找这样的东西。。。从表格中选择ROLE,其中ROLE=CASE WHEN 130>=从表格中选择SOA值,其中ROLE='RSM',130从表格中选择SOA值,其中ROLE='TMM',然后选择'TMM'或'ASM'Ende。我感觉在某些情况下应该检索整行。但这方面的东西,是的。哦,在将来,包含一个通过类似SQLFIDLE的东西运行的示例被认为是礼貌的。