2017-07-19 173 views
0

我想創建一個select查詢,它將根據參考表中設置的優先級爲每列選擇值。如果列中有多個值,它將使用日期字段選擇最近的值。基於優先級參考表選擇列值?

例子:

客戶表:

CustomerID customerName CustomerEmail monthDate SourceID 
1   Michael  NULL    1/1/2017  4 
2   Sarah   [email protected] 2/1/2017  2 
3   Dave   [email protected]  3/1/2017  1 
4   Sal   [email protected]  4/1/2017  4 
4   Sally   [email protected] 5/1/2017  4 
1   Mike S   [email protected] 5/1/2017  3 

參考表:

SourceID Priority 
1   2 
2   3 
3   4 
4   1 

4My選擇查詢會顯示:

CustomerID customerName CustomerEmail 
1   Michael  [email protected] 
2   Sarah   [email protected] 
3   Dave   [email protected] 
4   Sally   [email protected] 

那麼,一列有一個NULL值它將填充最高優先級值。如果有兩個具有相同優先級的值,它將選擇具有最近日期的值。必須在列級選擇此選項才能獲取每個字段的最新值。

任何幫助或正確方向的一個點將是偉大的。

感謝

回答

1

使用join帶來的表一起,並獲得優先。然後你可以使用row_number()選擇「第一」爲每一個客戶:

select c.* 
from (select c.*, 
      row_number() over (partition by c.customerid 
           order by r.priority desc, monthdate desc 
           ) as seqnum 
     from customer c join 
      reference r 
      on c.sourceid = r.sourceid 
    ) c 
where seqnum = 1; 
+0

這會不會只是選擇整行最高「優先級」。我需要這個在列級別上工作。例如,如果一個客戶(行1,2,3和4)有4行,它可以從行1中選擇名稱,從行2中選擇電子郵件,從行3中選擇電話號碼等等? – alwaystrying