2016-04-20 51 views
-1

我有一個基表,我需要根據條目的類型計算兩個日期之間的差異。考慮另一個表中的列作爲列標題的值

TBLA

+----------+------------+---------------+--------------+ 
| TypeCode | Log_Date | Complete_Date | Pending_Date | 
+----------+------------+---------------+--------------+ 
|  1 | 18/04/2016 | 19/04/2016 |    | 
|  2 | 10/04/2016 | 18/04/2016 | 15/04/2016 | 
|  3 | 12/04/2016 | 19/04/2016 |    | 
|  4 | 15/04/2016 | 17/04/2016 | 16/04/2016 | 
|  5 | 16/04/2016 | 21/04/2016 |    | 
|  1 | 19/04/2016 | 20/04/2016 |    | 
|  2 | 20/03/2016 | 31/03/2015 |    | 
|  3 | 25/03/2016 | 28/03/2016 |    | 
|  4 | 26/03/2016 | 27/03/2016 |    | 
|  5 | 27/03/2016 | 30/03/2016 |    | 
+----------+------------+---------------+--------------+ 

我必須要基於的TypeCode考慮的另一個查找表,其中有列名。

TBLB

+----------+----------+---------------+ 
| TypeCode | DateCol1 | DateCol2 | 
+----------+----------+---------------+ 
|  1 | Log_Date | Complete_Date | 
|  2 | Log_Date | Pending_Date | 
|  3 | Log_Date | Complete_Date | 
|  4 | Log_Date | Pending_Date | 
|  5 | Log_Date | Complete_Date | 
+----------+----------+---------------+ 

我做一個簡單的DATEDIFF兩者之間的日期我的計算。不過,我想查找從tblB這個計算考慮哪些列,並根據TypeCode將它應用於tblA

得到的表:

例如:當TypeCode24然後計算應DATEDIFF(d, Log_Date, Pending_Date),否則DATEDIFF(d, Log_Date, Complete_Date)

+----------+------------+---------------+--------------+----------+ 
| TypeCode | Log_Date | Complete_Date | Pending_Date | Cal_Days | 
+----------+------------+---------------+--------------+----------+ 
|  1 | 18/04/2016 | 19/04/2016 |    |  1 | 
|  2 | 10/04/2016 | 18/04/2016 | 15/04/2016 |  5 | 
|  3 | 12/04/2016 | 19/04/2016 |    |  7 | 
|  4 | 15/04/2016 | 17/04/2016 | 16/04/2016 |  1 | 
|  5 | 16/04/2016 | 21/04/2016 |    |  5 | 
|  1 | 19/04/2016 | 20/04/2016 |    |  1 | 
|  2 | 20/03/2016 | 31/03/2015 |    |   | 
|  3 | 25/03/2016 | 28/03/2016 |    |  3 | 
|  4 | 26/03/2016 | 27/03/2016 |    |   | 
|  5 | 27/03/2016 | 30/03/2016 |    |  3 | 
+----------+------------+---------------+--------------+----------+ 

任何幫助,將不勝感激。謝謝。

+0

請編輯您的問題,包括相關的表DDL和期望的結果。 –

+1

使用一個case語句。 case typecode when 1 then complete_date when 2 then etc –

+0

@ZoharPeled:謝謝你的建議,我現在修改了我的問題。 – Shanka

回答

2

使用JOINCASE表達:

SELECT 
    a.*, 
    Cal_Days = 
     DATEDIFF(
      DAY, 
      CASE 
       WHEN b.DateCol1 = 'Log_Date' THEN a.Log_Date 
       WHEN b.DateCol1 = 'Complete_Date' THEN a.Complete_Date 
       ELSE a.Pending_Date 
      END, 
      CASE 
       WHEN b.DateCol2 = 'Log_Date' THEN a.Log_Date 
       WHEN b.DateCol2 = 'Complete_Date' THEN a.Complete_Date 
       ELSE a.Pending_Date 
      END 
     ) 
FROM TblA a 
INNER JOIN TblB b 
    ON b.TypeCode = a.TypeCode 
+0

謝謝!精美的作品! :) – Shanka

相關問題