2017-04-05 84 views
1

我是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語句,將允許基於貸款狀況將要創建的列?

+0

你能告訴我們你的表架構? –

回答

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 
+0

嗨SqlZim,謝謝你的迴應。 將某些其他表連接到查詢時,聚合MAX會阻止其他列包含在查詢中。刪除聚合函數允許查詢運行,但在用戶定義的列中創建了多個重複的空值。 我應該將所有這些列添加到查詢的GROUP BY部分以允許查詢運行? –

+0

@ J.Mora是的,你會包含所有未被聚合在「group by」中的列。 – SqlZim

+0

非常感謝您的幫助! –

相關問題