2017-12-21 15 views
-1

私は現在の郵便/ポジションに従業員のリストを持っており、開始日はそのポジションと雇用開始日です。SQLクエリ:1従業員の位置/ 2の結果としての投稿

現在の位置を1つの結果として生成するクエリが必要です。位置の開始日が雇用の開始日と一致しない場合は、2番目の結果として履歴の位置が表示されます。あなたがunion all使用することができます

データ

[Employee Number] Position [Start Date] [Employment Start Date] 
----------------------------------------------------------------------- 
12345    Admin  01/01/2017  01/01/2016 

出力

[Employee Number] Position [Start Date] [End Date] 
----------------------------------------------------------- 
12345    Admin  01/01/2017  NULL 
12345    Historic 01/01/2016  31/12/2017 
+0

を、私はグラムですSQL Serverに対応しています。 –

答えて

0
SELECT 
     [Employee Number], 
     [Position], 
     [Start Date], 
     NULL AS [End Date] 
FROM 
     TABLE_NAME 

UNION ALL 

SELECT 
     [Employee Number], 
     'Historic' AS [Position], 
     [Employment Start Date] AS [Start Date], 
     DATEADD(DAY,-1,[Start Date]) AS [End Date] 
FROM 
     TABLE_NAME 
WHERE 
     [Start Date] <> [Employment Start Date] 
0

:角括弧から

select employee_number, position, start_date, cast(null as date) end_date 
from data 
union all 
select employee_number, position, employment_start_date, dateadd(day, -1, start_date) 
from data 
where employment_start_date < start_date; 
+0

ご回答ありがとうございました。私は上記のデータを持っていますが、終了日で、私の問題は、2行、現在のポストと歴史的なポスト上のデータを出力しています。申し訳ありませんが説明が明確でなかった場合(最初の投稿...) –

0
  WITH table1 AS (
       SELECT * FROM (
        VALUES 
         ('12345', 'Admin','2017-01-01','2016-01-01') 

        ) AS a (EmployeeNumber, position,StartDate,EmploymentStartDate) 
      ) 

      select EmployeeNumber, position,StartDate, CASE WHEN StartDate!=EmploymentStartDate THEN NULL ELSE EmploymentStartDate END AS EndDate from table1 
      union 
      Select EmployeeNumber,'Historic',EmploymentStartDate as StartDate,DATEADD(dd,-1,DATEADD(yy,1,StartDate)) AS EndDate 
      From table1 where StartDate!=EmploymentStartDate 
関連する問題