2016-03-04 110 views
0

我有一個表,我通過隊列填充,我無法改變表的結構。SQL「有條件」where子句中

問題: 表包含四個標識符 - SKU,部門級和子類 - 我需要從表中的第一個條件的順序返回等領域如下滿足:

  1. 如果SKU存在於表,然後獲取值的SKU
  2. 否則如果SKU系/類/子類存在於表中得到 值
  3. 否則如果SKU系/類存在於表 GET值
  4. 否則如果SKU部門存在該表,則獲取 值。
  5. 否則有對SKU沒有適用的值(我不認爲 發生這種情況)

我填充報表字段從該表中的Java應用程序,我不想寫四篇查詢來檢查這些情況。我不相信我能夠執行任何過程化SQL,因此我需要通過本機SQL查詢來完成此操作。

任何幫助表示讚賞。我不得不改變查詢了一下。以下查詢工作:

Select dept, class, subclass, 
     case 
     when sku = :sku then 1 
     when dept = :dept and class = :class and subclass = :subclass then 2 
     when dept = :dept and class = :class then 3 
     when dept = :dept then 4 
     end as priority, 
     field1, field2, field3, field4, field5 
From schema.table 
where sku = :sku 
     or (dept = :dept and class = :class and subclass = :class) 
     or (dept = :dept and class = :class and subclass is null) 
     or (dept = :dept and class is null and subclass is null) 
order by priority asc 

;

+1

我錯過了一些東西。你是在填充桌面還是在查詢它?示例數據和期望的結果可以真正幫助解釋你想要做什麼。另外,用您正在使用的數據庫標記問題。 –

回答

0

因此,您在參數的查詢和需要值字段中傳遞4個參數(SKU,Department,Class和Subclass)。

select 
    case 
     when sku=:sku then 1 
     when Department=:Department and Class=:Class and Subclass=:Subclass then 2 
     when Department=:Department and Class=:Class then 3 
     when Department=:Department then 4 
    end as priority, 
    <value field here> 
from the_table t 
where sku=:sku 
    or Department=:Department 
    or Class=:Class 
    or Subclass=:Subclass 
order by priority 

查詢的第一行是你所需要的。如何提取第一行取決於您使用的數據庫

+0

謝謝。正是我在找的。我沒有考慮在結果字段中返回優先級。 – neal