如何根据另一列的条件查询同一列两次?

Posted

技术标签:

【中文标题】如何根据另一列的条件查询同一列两次?【英文标题】:How to query the same column twice based on conditions of another column? 【发布时间】:2017-04-05 16:49:54 【问题描述】:

我是 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 语句?

【问题讨论】:

你能告诉我们你的表架构吗? 【参考方案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

【讨论】:

您好 SqlZim,感谢您的回复。将其他一些表加入查询时,聚合 MAX 会阻止其他列包含在查询中。删除聚合函数允许查询运行,但在用户定义的列中创建了多个重复的 Null。我应该将所有这些列添加到查询的 GROUP BY 部分以允许查询运行吗? @J.Mora 是的,您将在group by 中包含所有未聚合的列。 非常感谢您的帮助! @J.Mora 乐于助人!

以上是关于如何根据另一列的条件查询同一列两次?的主要内容,如果未能解决你的问题,请参考以下文章

Mysql 条件 MAX 或 MIN 依赖于另一列值

sql一列有多值查询,根据多个只查询我想要的数据

ACCESS有一个表,我想根据A列或是C列两列数据中的任意数据进行查询,怎么创建查询? 哪位高人可以指点下

Hive查询:根据条件选择一列,另一列值匹配某些特定值,然后将匹配结果创建为新列

EXCEL中SQL Server Where 使用某一列的数据作为 查询条件的命令?

Mysql:优化使用一列或另一列的查询