2016-04-20 2 views
-1

私は、エントリのタイプに基づいて2つの日付の差を計算する必要がある基本テーブルを持っています。あるテーブルの値を別のテーブルの列ヘッダーとして考慮する

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 | 
+----------+----------+---------------+ 

私は私の計算のための2つの日付の間の単純なDATEDIFFをしています。しかし、この計算で考慮する列をtblBから検索し、TypeCodeに基づいてtblAに適用したいと考えています。表を得られ

例えば:TypeCode2又は4である場合、計算は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 | 
+----------+------------+---------------+--------------+----------+ 

任意の助けが理解されるであろう。ありがとう。 CASE式で

+0

関連するテーブルDDL、所望の結果が含まれるようにあなたの質問を編集してください。 –

+1

caseステートメントを使用します。ケース1のときのタイプコードは2の時などに完了します –

+0

@ ZoharPeled:提案していただきありがとうございます。 – Shanka

答えて

2

使用JOIN

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

関連する問題