2015-06-03 4 views
0

Все еще используется 2008. У меня есть следующие две таблицы и вы должны иметь возможность вытаскивать людей, когда на заданную дату код является d в первый раз. Легко получить тех, кто никогда не был, но я не могу понять, как включить людей в первый раз, когда они будут d, если предыдущий e. Я попытался использовать команду для создания списка всех es и сопоставить ее с другими, но не удалось выяснить, как связать ее с другим запросом.получение уникальных записей во времени при изменении значения SQL

Table1           Table2 
Person date1 date2 date3 date4 date5 date6 Person FirstServ 
1   e    e  d  d  d  1   date1 
2    e  e     d  2   date2 
3        d  d  d  3   date4 
4        d  d    4   date4 
5   e     d  d  d  5   date1 
6   e  e     d  d  6   date1 
7    e  e  d  d  d  7   date2 
8        d  d  d  8   date4 
9        d  d    9   date4 
10        d  d  d  10   date4 

Текущий код без приведения в спецификаторе есть (и да, я знаю, что я не обязательно является наиболее эффективным кодером :))

declare @myorder int 
set @myorder = (select academicOrder from DimTermYear dt3 where termID='14/FA'); 

with myDual as (
select distinct ds.STTR_STUDENT, dt.academicOrder 
    from dbo.DimStudentTerms ds 
     left join DimTermYear dt on dt.termID=ds.STTR_TERM 
    where ds.STTR_STU_CURRENT_TYPE = 'DE' 
) 


Select distinct sa.STC_PERSON_ID,ds2.STTR_STU_CURRENT_TYPE,dt2.academicOrder 
    from StudentAcadCredFrom2000 sa 
     left join dbo.DimStudentTerms ds2 on ds2.STTR_STUDENT=sa.STC_PERSON_ID 
     left join DimTermYear dt2 on dt2.termID=ds2.STTR_TERM 
    where (sa.STC_CURRENT_STATUS in ('A','N') or (STC_CURRENT_STATUS='D' and STC_GRADE IS NOT NULL)) 
    and sa.STC_TERM='14/FA' and ds2.D04_FIRST_TERM_ENR='14/FA' 
    and ds2.STTR_STU_CURRENT_TYPE='DS' and [email protected] 
order by sa.STC_PERSON_ID 
+0

Ваш код не совпадает с данными, например, вы предоставили. Пожалуйста, настройте тот или иной, чтобы уточнить свои намерения. – Synergist

+0

Спасибо за редактирование dnoeth, я работал, чтобы понять это, но вы избили меня! – Michael

+0

Synergist, Это мое первое сообщение, поэтому я увижу, что я могу сделать, просто использовал таблицы в качестве примеров базовой проблемы. Я понимаю, что полная информация может быть более полезной, подумал, что я просто выброшу свой код в случае, если это поможет. Прошу прощения, если это сделало его более запутанным. – Michael

ответ

0

Если вы заранее знаете, что в Таблице 1 будет иметь только 6 Дата колонны (date1 через date6), то вы можете просто использовать ряд следующих случаях:

with temp as (
    select Person, firstDateOfD = (
     CASE WHEN date1 = 'd' THEN date1 
     CASE WHEN date2 = 'd' THEN date2 
     CASE WHEN date3 = 'd' THEN date3 
     CASE WHEN date4 = 'd' THEN date4 
     CASE WHEN date5 = 'd' THEN date5 
     CASE WHEN date6 = 'd' THEN date6) 
    from Table1 
) 
-- create your lists as you need. 
-- e.g. date1_list = select Person from temp where firstDateOfD = date1 
Смежные вопросы