解码oracle / sql中的多个条件

时间:2014-09-01 08:55:09

标签: sql oracle decode

我有这个表包含:

id number = unique per user
code = c (calendar) or f (fiscal)
start_month = 1 to 12
date_created

我如何解码提交期限:

e.g。如果用户被标记为C并且start_month = 1,则第一个qtr的归档时间为“3”,第二个qtr为6个,第三个季度为9个,第四个季度为12个。

如果用户被标记为F并且start_month = 2,那么归档期将是第1个qtr = 4,第2个qtr = 7,第3个qtr = 10,第4个qtr = 1

1 个答案:

答案 0 :(得分:0)

我的第一个想法是将start_month转换为日期并使用add_months(),但当然如果你不能使用case,那么你的版本早于8i,你也将无法使用add_months()。

任何数学家都会因为以下使用div和mod 13而感到震惊,但如果我正确理解你想要实现的目标,我认为这可以在Oracle 7和旧版本中使用:< / p>

select decode ( code, 'c', 3,
                      'f', trunc((2+start_month)/13) + mod((2+start_month),13)) as qtr1,
       decode ( code, 'c', 6,
                      'f', trunc((5+start_month)/13) + mod((5+start_month),13)) as qtr2,
       decode ( code, 'c', 9,
                      'f', trunc((8+start_month)/13) + mod((8+start_month),13)) as qtr3,
       decode ( code, 'c', 12,
                      'f', trunc((11+start_month)/13) + mod((11+start_month),13)) as qtr4,
etc...