2017-02-21 9 views
0

日付を含む2つの列の間で特定の日付をフィルタリングする簡単な方法はありますか?私は特定の初めと終わりの年の中に雇われたすべての従業員を見せたい。従業員のカレンダーには、CalendarYearを示す列(例:2001-2002、2005-2006など)が表示され、数年があります。従業員が2001年2月1日から2002年1月2日の間に雇われた場合、私は2001年から2002年までのCalendarYearを1列に表示したいと考えています。年を含む列の間の特定の日付をフィルタする

select hr.EmployeeID 
hr.EmploymentHireDate 
,emp.CalendarBeginYear 
,emp.CalendarEndYear 
,emp.CalendarYear 
,case when EmployeeHireDate between CalendarBeginYear and CalendarEndYear then CalendarYear else null 
end as CalendarEnbdYear 
    from HR_Employee hr 
    join EmployeeCalendar em 
    hr.EmployeeID = emp.EmployeeID 

私は何かが不足しているか間違っていることを知っています。 はEmployeeIdがカレンダーになり、なぜ

+0

本当に 'EmployeeCalendar'に' EmployeeId'がありますか? – SqlZim

+0

まずは、まずは、2001年2月1日から2002年1月2日ですか?あなたの事例に基づいてどの日付かを知ることは不可能です。次の質問は、カットオフが毎年どのようになっているかをどのように知っていますか、おそらく毎年同じではないでしょうか? –

答えて

0
select 
    hr.EmployeeID 
, hr.EmploymentHireDate 
, emp.CalendarYear 
from HR_Employee hr 
    inner join EmployeeCalendar em 
    on hr.EmployeeHireDate >= emp.CalendarBeginYear 
    and hr.EmployeeHireDate <= emp.CalendarEndYear 
    and hr.EmployeeID = emp.EmployeeID -- < there is a calendar for each employee? 

は、私にはわからない、どのような援助をありがとう、それがない場合は、参加の最後の行を削除し、それはあなたが探しているものを返す必要があります。カレンダーテーブルにEmployeeIdがある場合、上記のクエリは意図したとおりに動作するはずです。

+0

ありがとう、それは動作します! – user1964673

+0

@ user1964673ようこそ! – SqlZim

関連する問題