SQL数据库,发现差异

时间:2016-06-06 21:23:03

标签: sql oracle

我有一张金额表。这些金额分为3种方式:半月,每月和每季度。

  • 如果金额> 10000 =半月刊
  • 如果金额> 5000 =每月
  • 如果金额<= 5000 =每季度

Amounts表中的数据必须与上述内容相符。

如果有任何不符之处,我需要向我吐口水。

如何编写此代码?

2 个答案:

答案 0 :(得分:1)

嗯,你可以检查:

select t.*
from t
where ((amount > 10000 and classification <> 'Semi-Monthly') or
       (amount <= 10000 and amount > 5000 and classification <> 'Monthly') or
       (amount <= 5000 and classification <> 'Quarterly')
      );

这将返回差异。

答案 1 :(得分:1)

将金额和分类同时放在同一张表中是一个坏主意。你有冗余数据,这就是为什么你现在害怕这两列可能不匹配的原因。

为具有适当范围的分类设置单独的表格:

table classification
====================

text         | range_start | range_end
-------------+-------------+----------
Semi-Monthly | 10001       | null
Monthly      | 5001        | 10000
Quarterly    | null        | 5000

并从表中删除分类。然后,只要需要从连接中获取分类:

select m.*, c.text as classification
from mytable m
join classification c on m.amount between coalesce(c.range_start, m.amount)
                                      and coalesce(c.range_end, m.amount);