2016-06-06 51 views
-2

我有一個數量表。金額分爲三種方式:半月,每月和每季度。SQL數據庫,查找差異

  • 如果量> 10000 =半每月
  • 如果量> 5000 =每月
  • 如果金額< = 5000 =季刊

在量表中的數據,必須在上述匹配。

如果有任何差異我需要吐出來對我。

我該怎麼寫這段代碼?

+2

您已經爲MySQL和Oracle添加了標籤。你真的在使用哪個數據庫?您的表格是否有「金額」列和「分類」列? –

+0

我打算只標記Oracle。是的,它有兩個,金額和分類。 – Joe

+0

你是否試圖在查詢中找到它或在表上設置檢查約束? – Nicarus

回答

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') 
    ); 

這將返回的差異。

+0

謝謝!現在似乎很明顯。 – Joe

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);