Sql 在3个表中顺序查找多条记录的特定字符串,并按最新条目显示

Sql 在3个表中顺序查找多条记录的特定字符串,并按最新条目显示,sql,sql-server,ssms,Sql,Sql Server,Ssms,我有3个表,其中我需要按顺序搜索特定字符串“%sell back%”,并根据我首先找到它的位置获取最新条目。下面列出了更多详细信息 表3,3个表如下: |---------------|---------------|------------|-----------------------|-----------------------|------------| | CustomerID | CustomerName | ProblemId | ProblemDescription

我有3个表,其中我需要按顺序搜索特定字符串“%sell back%”,并根据我首先找到它的位置获取最新条目。下面列出了更多详细信息 表3,3个表如下:

|---------------|---------------|------------|-----------------------|-----------------------|------------|
|  CustomerID   | CustomerName  | ProblemId  | ProblemDescription    |      EventReason      | EventDate  |
|---------------|---------------|------------|-----------------------|-----------------------|------------|
|    1234       | Johnathan     | 3178765    |                       | Accepted as sell back | 2019-10-05 |
|---------------|---------------|------------|-----------------------|-----------------------|------------|
表1:客户

|---------------|---------------|
|  CustomerID   | CustomerName  |
|---------------|---------------|
|    1234       | Johnathan     |
|---------------|---------------|
表2:问题

|---------------|---------------|----------------------|---------------|
|  ProblemID    | CustomerID    | ProblemDescription   | DateReported  |
|---------------|---------------|----------------------|---------------|
|    3203494    | 1234          | Needs Appointment    | 2019-08-01    |
------------------------------------------------------------------------
|    3178766    | 1234          | Sell Back Customer   | 2019-08-12    |
------------------------------------------------------------------------
|    3178765    | 1234          |                      | 2019-08-12    |
|---------------|---------------|----------------------|---------------|
表3:问题事件

|---------------|---------------|----------------------|---------------|
|ProblemEventID | ProblemID     | EventReason          | EventDate     |
|---------------|---------------|----------------------|---------------|
|    1926144    | 3178766       | Reported             | 2019-08-12    | 
------------------------------------------------------------------------
|    2022750    | 3178766       | sell back            | 2019-08-13    |
------------------------------------------------------------------------
|    2022751    | 3178766       | Accepted as sell back| 2019-08-26    |
------------------------------------------------------------------------
|    2022899    | 3178766       | Finalized            | 2019-08-31    |
------------------------------------------------------------------------
|    1926200    | 3178765       | Reported             | 2019-09-15    | 
------------------------------------------------------------------------
|    2022626    | 3178765       | sell back            | 2019-09-20    |
------------------------------------------------------------------------
|    2024500    | 3178765       | Accepted as sell back| 2019-09-30    |
------------------------------------------------------------------------
|    2024501    | 3178765       | Finalized            | 2019-10-05    |
|---------------|---------------|----------------------|---------------|
我要查找的结果应按照下列步骤顺序提取:

步骤1

在问题表的ProblemDescription列中搜索“%sell back%”字符串(如果存在),然后选择具有最新报告日期的相应问题ID并继续执行步骤2

步骤2

在问题事件表中搜索步骤1中选择的相应问题ID,并检查问题事件表的EventReason列中是否存在“%sell back%”字符串,然后选择最新条目 并显示如下

|---------------|---------------|------------|-----------------------|-----------------------|------------|
|  CustomerID   | CustomerName  | ProblemId  | ProblemDescription    |      EventReason      | EventDate  |
|---------------|---------------|------------|-----------------------|-----------------------|------------|
|    1234       | Johnathan     | 3178766    | Sell Back Customer    | Accepted as sell back | 2019-08-26 |
|---------------|---------------|------------|-----------------------|-----------------------|------------|
如果对于步骤2,在问题事件表的EventReason列中未找到字符串“%sell back%”,则应显示问题事件表中相应问题ID的最新行

交替顺序:

如果第1步搜索“%sell back%”字符串未产生任何结果,即ProblemDescription列不包含“%sell back%”字符串,则直接在中搜索同一字符串“%sell back%” 问题事件表,然后选择最新条目,并按如下方式显示结果:

|---------------|---------------|------------|-----------------------|-----------------------|------------|
|  CustomerID   | CustomerName  | ProblemId  | ProblemDescription    |      EventReason      | EventDate  |
|---------------|---------------|------------|-----------------------|-----------------------|------------|
|    1234       | Johnathan     | 3178765    |                       | Accepted as sell back | 2019-10-05 |
|---------------|---------------|------------|-----------------------|-----------------------|------------|
我希望获取多个客户记录~10K记录的结果


非常感谢您的帮助。

您可以使用行号尝试下面的解决方案。这是你的电话号码

输出:

*-------------------------------------------------------------------------------------------------*
| customerID    customerName    problemID   problemDescription  eventReason             eventDate |
*-------------------------------------------------------------------------------------------------*
|   1234         Johnathan       3178766    Sell Back Customer  Accepted as sell back  2019-08-26 |
*-------------------------------------------------------------------------------------------------*

这与您之前的问题有何不同?@SMor在这个问题中,我希望首先扫描问题表并查找“%sell back%”标记,然后在问题事件表中找到最新的“%sell back%”条目。而在上一个问题中,我只是在问题事件表中查找“%sell back%”标记。Hi@Zeelous感谢您的帮助,但此查询没有在问题表中找到PorbleDescription为空但问题事件表中相应的problemid存在“%sell back%”标记的行。