sql-server - 将多个左连接合并到 1 个查询中

标签 sql-server

我有两个查询想要合并。一个查询是左连接同一个表中的列,另一个查询是左连接两个不同表中的列。两个查询都有相同的表,只是不确定如何正确设置查询。

第一个查询:

SELECT BIZ_GROUP,
       ORDER_ID,
       STATION,
       A.TC_DATE,
       WANT_DATE,
       TIME_SLOT,
       JOB_CODE,
       [ADDRESS],
       CITY,
       A.TECH_ID,
       A.PREMISE,
       ISNULL(B.LAST_ARRIVED, A.LAST_ARRIVE) AS ARRIVED,
       ORDER_CLOSED,
       COMP_STATUS,
       WORK_STATUS,
       REMARKS,
       CORRECTION
FROM MET_timecommit A
     LEFT JOIN(SELECT premise,
                      TC_DATE,
                      TECH_ID,
                      MIN(last_arrive) AS LAST_ARRIVED
               FROM MET_timecommit
               WHERE PREMISE IS NOT NULL
               GROUP BY premise,
                        TC_DATE,
                        TECH_ID) B ON B.TC_DATE = A.TC_DATE
                                  AND B.PREMISE = A.PREMISE     

第二个查询:

SELECT *
FROM MET_timecommit
     LEFT JOIN (SELECT ORDER_ID,
                       created,
                       host_creation,
                       went_to 
                FROM workload
                WHERE went_to >= getdate()-365) C ON C.went_to=MET_timecommit.TC_DATE
                                                 AND C.order_id=MET_timecommit.order_id

显然我不习惯这个论坛。大家没必要这么无礼。 TDP 能够根据我提供的内容帮助我。所有其他评论都是不必要的。

最佳答案

这应该为表 A 的每一行返回表 B 和表 C 的行:

SELECT A.BIZ_GROUP,
       A.ORDER_ID,
       A.STATION,
       A.TC_DATE,
       A.WANT_DATE,
       A.TIME_SLOT,
       A.JOB_CODE,
       A.[ADDRESS],
       A.CITY,
       A.TECH_ID,
       A.PREMISE,
       ISNULL(B.LAST_ARRIVED, A.LAST_ARRIVE) AS ARRIVED,
       A.ORDER_CLOSED,
       A.COMP_STATUS,
       A.WORK_STATUS,
       A.REMARKS,
       A.CORRECTION,
       C.*
FROM MET_timecommit A
     LEFT JOIN(SELECT premise,
                      TC_DATE,
                      TECH_ID,
                      MIN(last_arrive) AS LAST_ARRIVED
               FROM MET_timecommit
               WHERE PREMISE IS NOT NULL
               GROUP BY premise,
                        TC_DATE,
                        TECH_ID) B ON B.TC_DATE = A.TC_DATE
                                  AND B.PREMISE = A.PREMISE
     LEFT JOIN (SELECT ORDER_ID,
                       created,
                       host_creation,
                       went_to 
                FROM workload
                WHERE went_to >= getdate()-365) C ON C.went_to=A.MET_timecommit.TC_DATE
                                                 AND C.order_id=A.MET_timecommit.order_id

关于sql-server - 将多个左连接合并到 1 个查询中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48931477/

相关文章:

sql-server - SQL 作业和 Windows 任务计划程序有什么区别?

java - SQLServer - 是否可以使用 jdbc 结果集更新几何列?

SQL Server : Most optimal way of storing time (without date)

c# - 为什么在将对象转换为整数时会出现 InvalidCastException?

sql-server - 使用通知服务在 SQL Server Reporting Services 中获取通知的最佳方式

.net - Getdate() 函数返回的结果与 dotnet 中的 DateTime.Now 不同

sql - SSIS 包将数据加载到 azure 数据仓库时出错

sql - SQL Server 查询完成通知

sql-server - LINQ to SQL 对象版本控制

SQL 查询最小和最大分组按标志