2015-01-14 3 views
1

Я хотел бы помочь в том, как думать и заказывать эту проблему SQL, не обязательно с фактическим кодом.Больше чем одно значение для PIVOT в хронологическом порядке

У меня есть большой стол фона проверяет мои поля:

[First Name] 
[Last Name] 
[SSN] 
[Administration] // Who conducted the background check 
[Date of Birth]  // This field is often null 
[Result]   // Possible values are 'No Record', 'Record', or Null 
[ResultDate] 

Большинство людей имеют более чем один проверку. Например, Джон Доу мог иметь один фон от администрации X от 1 января 2011 года, а другой - от администрации Y от 1 января 2012 года.

Я хотел бы PIVOT Результат, результат и администрация вместе в хронологическом порядке. Например, запись будет считаться

John Doe - 'Record' - 1/1/2011 - Administration X - 'Record' on 1/1/2013 

Я не могу понять, как это сделать. Как бы вы опирались на три разных поля? Если вы можете опираться на три разных поля (Result, ResultDate, Administration), можете ли вы упорядочить их в хронологическом порядке на основе ResultDate?

ответ

1

Вы можете использовать row_number сортировать Result Даты по имени и ССН и сцепить ваш результат, Результат Дата и столбцы администрирования:

-- load sample data 
if object_id('tempdb..#background_checks','u') is not null 
    drop table #background_checks 
create table #background_checks 
    (
    [First Name] varchar(50), 
    [Last Name] varchar(50), 
    [SSN] char(11), 
    [Administration] varchar(50), 
    [Result] varchar(50), 
    [Result Date] date 
    ) 
insert into #background_checks 
    values 
     ('John','Doe',NULL,'Administration X','Record','2011-01-01'), 
     ('John','Doe',NULL,'Administration Y','Record','2012-01-01'), 
     ('John','Doe',NULL,'Administration Z','No Record','2013-01-01') 

-- pivot results 
select 
    [First Name], 
    [Last Name], 
    [1] as [Result 1], 
    [2] as [Result 2], 
    [3] as [Result 3] 
from (select 
     [First Name], 
     [Last Name], 
     [Result] + ' - ' + 
      convert(varchar(10),[Result Date],101) + ' - ' + 
      [Administration] as [Result], 
     row_number() over(partition by [First Name],[Last Name],[SSN] 
      order by [Result Date]) as ColumnID 
     from #background_checks) t 
     pivot (
      max([Result]) for ColumnID in([1],[2],[3]) 
      ) p1 
Смежные вопросы