Как запросить один и тот же столбец дважды на основе условий другого столбца?

Я новичок в TSQL и надеялся получить рекомендации по условиям работы с TSQL.

Есть ли способ, чтобы одно и то же поле SQL запрашивалось как разные столбцы? Имя моего поля меняется по мере того, как файл перемещается из разных состояний, которые мы определили, и я пытаюсь использовать связанную отметку времени из изменения состояния для анализа некоторых тенденций. Например, связанные данные для файла будут выглядеть примерно так:

<File_History
Loanstatusdescriptor= “Underwrite Assigned” Status.EventTime= “4/1/2017 12:05”>

<File_History
        Loanstatusdescriptor= “Closing Request Received” Status.EventTime= “4/3/2017 17:15”>

У меня есть отчет, который я создаю на основе статусов определенных файлов по мере их прохождения в рабочем процессе. Будет ли запрос выглядеть примерно так:

SELECT

LoanInfo.UnderwriterName

,File_History.Status.EventTime (IF loanstatusdescriptor= “Underwrite Assigned”) AS ‘Underwriter Assigned Date’

,File_History.Status.EventTime ( IF loanstatusdescriptor= “Closing Request Received”) AS ‘Closing Request Receieved Date’

….

Конечный продукт будет выглядеть примерно так

    Underwriter|Underwriter Assigned Date |Closing Request Received Date  
    Bobby Brown    4/1/2017                 4/3/2017
    Sally Jones    4/7/2017                 4/9/2017
    Chris Graff    4/6/2017                 4/17/2017

Как бы я написал операторы T-SQL, которые позволили бы создавать столбцы на основе статуса кредита?


person J. Mora    schedule 05.04.2017    source источник
comment
Вы можете показать нам свою схему таблицы?   -  person bruno.almeida    schedule 05.04.2017


Ответы (1)


Предполагая, что File_History_Status — это таблица, которую можно соединить с LoanInfo:

Использование условной агрегации с известным количеством столбцов:

select 
    li.UnderwriterName
  , [Underwriter_Assigned_Date] = max(case 
      when fhs.LoanStatusDescriptor = 'Underwriter Assigned' 
        then fhs.EventTime 
      end)
  , [Closing_Request_Received_Date] = max(case 
      when fhs.LoanStatusDescriptor = 'Closing Request Received' 
        then fhs.EventTime 
      end)
from LoanInfo li
  inner join File_History_Status fhs
    on li.LoanId = fhs.LoanId
group by li.UnderwriterName
person SqlZim    schedule 05.04.2017
comment
Привет, SqlZim, спасибо за ответ. При присоединении некоторых других таблиц к запросу совокупный MAX предотвращает включение других столбцов в запрос. Удаление агрегатной функции позволяет выполнить запрос, но с несколькими повторяющимися значениями NULL в созданных пользователем столбцах. Должен ли я добавить все эти столбцы в часть запроса GROUP BY, чтобы запрос мог выполняться? - person J. Mora; 05.04.2017
comment
@J.Mora J.Mora Да, вы бы включили все столбцы, которые не агрегируются в group by. - person SqlZim; 05.04.2017
comment
Потрясающе Спасибо за помощь! - person J. Mora; 05.04.2017
comment
@J.Mora Рад помочь! - person SqlZim; 05.04.2017