首页 > 解决方案 > T-SLQ 你可以在 on 子句中使用聚合吗?

问题描述

我有 2 个调用表。表 1 有呼叫/客户信息。表 2 有通话记录,通话期间发生了什么。我需要将表 2 加入表 1,但只为第一部手机拉“时间”。通话记录中有多个“电话”,第一个需要时间。

Table 1                             Table 2                                       Goal

Call ID  Client  State            Call ID   Method     Time           Call ID   Client  State  Time
1        John    TX               1         Inbound    11:00          1         John    TX     11:01
2        Mike    CA               1         Phone      11:01          2         Mike    CA     11:31
3        Susan   NA               1         Answer     11:01          3         Susan   NA     ...   
4        ...     ....             1         Phone2     11:05          4
                                  1         Call End   11:22          .         etc
                                  2         Inbound    11:30
                                  2         Phone      11:31

有点想做这样的事情。

SELECT *
FROM Table1 t1 on Table2 t2 = t1.call_id = t2.call_id and t2.Method like '%Phone%'

但这会拉所有电话时间。需要 MIN(电话)。您可以在 on 子句中使用聚合吗?

标签: sqltsqlssms

解决方案


不,您不能在on子句中使用聚合。相反,使用apply

SELECT *
FROM Table1 t1 CROSS APPLY
     (SELECT TOP (1) t2.*
      FROM Table2 t2 
      WHERE t2.call_id = t1.call_id and 
            t2.Method like '%Phone%'
      ORDER BY phone
     ) t2;

推荐阅读