Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何组合这两个SQL查询_Sql_Sql Server - Fatal编程技术网

如何组合这两个SQL查询

如何组合这两个SQL查询,sql,sql-server,Sql,Sql Server,我有两个相同格式的SQL查询,但更不相关 SELECT TOP (100) PERCENT dbo.[Case].Id AS CaseId, dbo.[Case].State, dbo.[Case].StartDate, dbo.[Case].Description, dbo.[Case].OrderNumber, dbo.[Case].LastUpdatedDate, dbo.[User].Name AS CompanyUserName, User_

我有两个相同格式的SQL查询,但更不相关

SELECT TOP (100) PERCENT 
    dbo.[Case].Id AS CaseId,
    dbo.[Case].State, dbo.[Case].StartDate, dbo.[Case].Description,
    dbo.[Case].OrderNumber, dbo.[Case].LastUpdatedDate,
    dbo.[User].Name AS CompanyUserName, 
    User_1.Name AS ResponsibleCompanyUserName,
    User_2.Name AS CustomerName, dbo.Property.Address,
    dbo.[Case].CompanyId, dbo.[Case].PartnerSettingId
FROM
    dbo.[User] AS User_2
INNER JOIN 
    dbo.Property ON User_2.Id = dbo.Property.UserId
RIGHT OUTER JOIN 
    dbo.[Case] ON dbo.Property.Id = dbo.[Case].PropertyId
LEFT OUTER JOIN 
    dbo.[User] AS User_1 ON dbo.[Case].ResponsibleCompanyUserId = User_1.Id
LEFT OUTER JOIN 
    dbo.[User] ON dbo.[Case].CompanyUserId = dbo.[User].Id
WHERE
    (dbo.[Case].DisableNotifications = 0)
    AND (dbo.[Case].IsDeleted IS NULL)
    AND (dbo.[Case].OrderNumber IS NOT NULL)


这两种方法都是各自独立工作的,我想将它们组合成一种方法,其中第二个查询将结果数添加到主SQL结果中。我想在第二个查询中的
caseId
等于主SQL中当前的caseId的地方加入它们<代码>案例ID将由最终实现中的一个过程提供。

如果您的意思与我认为的相同:

    SELECT        TOP (100) PERCENT dbo.[Case].Id AS CaseId, dbo.[Case].State, dbo.[Case].StartDate, dbo.[Case].Description, dbo.[Case].OrderNumber, dbo.[Case].LastUpdatedDate, dbo.[User].Name AS CompanyUserName, 
                         User_1.Name AS ResponsibleCompanyUserName, User_2.Name AS CustomerName, dbo.Property.Address, dbo.[Case].CompanyId, dbo.[Case].PartnerSettingId
FROM            dbo.[User] AS User_2 INNER JOIN
                         dbo.Property ON User_2.Id = dbo.Property.UserId RIGHT OUTER JOIN
                         dbo.[Case] ON dbo.Property.Id = dbo.[Case].PropertyId LEFT OUTER JOIN
                         dbo.[User] AS User_1 ON dbo.[Case].ResponsibleCompanyUserId = User_1.Id LEFT OUTER JOIN
                         dbo.[User] ON dbo.[Case].CompanyUserId = dbo.[User].Id
WHERE        (dbo.[Case].DisableNotifications = 0) AND (dbo.[Case].IsDeleted IS NULL) AND (dbo.[Case].OrderNumber IS NOT NULL)


UNION ALL

    SELECT        TOP (100) PERCENT dbo.[Case].Id AS CaseId, dbo.[Case].State, dbo.[Case].StartDate, dbo.[Case].Description, dbo.[Case].OrderNumber, dbo.[Case].LastUpdatedDate, dbo.[User].Name AS CompanyUserName, 
                         User_1.Name AS ResponsibleCompanyUserName, User_2.Name AS CustomerName, dbo.Property.Address, dbo.[Case].CompanyId, dbo.[Case].PartnerSettingId
FROM [dbo].[CaseMessage] where UserId != 55 and [CaseId] = 245 and [ReadTimestamp] IS NULL

您可以基于
CaseId

with cte1 as
    (
    SELECT        TOP (100) PERCENT dbo.[Case].Id AS CaseId, dbo.[Case].State, dbo.[Case].StartDate, dbo.[Case].Description, dbo.[Case].OrderNumber, dbo.[Case].LastUpdatedDate, dbo.[User].Name AS CompanyUserName, 
                             User_1.Name AS ResponsibleCompanyUserName, User_2.Name AS CustomerName, dbo.Property.Address, dbo.[Case].CompanyId, dbo.[Case].PartnerSettingId
    FROM            dbo.[User] AS User_2 INNER JOIN
                             dbo.Property ON User_2.Id = dbo.Property.UserId RIGHT OUTER JOIN
                             dbo.[Case] ON dbo.Property.Id = dbo.[Case].PropertyId LEFT OUTER JOIN
                             dbo.[User] AS User_1 ON dbo.[Case].ResponsibleCompanyUserId = User_1.Id LEFT OUTER JOIN
                             dbo.[User] ON dbo.[Case].CompanyUserId = dbo.[User].Id
    WHERE        (dbo.[Case].DisableNotifications = 0) AND (dbo.[Case].IsDeleted IS NULL) AND (dbo.[Case].OrderNumber IS NOT NULL)
    ),
    cte2 as
    (select TOP (100) PERCENT dbo.[Case].Id AS CaseId, dbo.[Case].State, dbo.[Case].StartDate, dbo.[Case].Description, dbo.[Case].OrderNumber, dbo.[Case].LastUpdatedDate, dbo.[User].Name AS CompanyUserName, 
                     User_1.Name AS ResponsibleCompanyUserName, User_2.Name AS CustomerName, dbo.Property.Address, dbo.[Case].CompanyId, dbo.[Case].PartnerSettingId FROM [dbo].[CaseMessage] where UserId != 55 and [CaseId] = 245 and [ReadTimestamp] IS NULL
    ) select cte1.*,cte2.* from cte1 join cte2 on cte1.CaseId=cte2.CaseId

几乎我认为用户ID在哪里!=55且[CaseId]=245且[ReadTimestamp]为空-245为dbo。[Case].Id来自主查询,因此查看并获取主查询中所有选定项的计数。因此,在联合ALLAlmost 100%工作后,将主查询添加到第二个选择中,并且根据我的工作情况进行了少量更改-谢谢
with cte1 as
    (
    SELECT        TOP (100) PERCENT dbo.[Case].Id AS CaseId, dbo.[Case].State, dbo.[Case].StartDate, dbo.[Case].Description, dbo.[Case].OrderNumber, dbo.[Case].LastUpdatedDate, dbo.[User].Name AS CompanyUserName, 
                             User_1.Name AS ResponsibleCompanyUserName, User_2.Name AS CustomerName, dbo.Property.Address, dbo.[Case].CompanyId, dbo.[Case].PartnerSettingId
    FROM            dbo.[User] AS User_2 INNER JOIN
                             dbo.Property ON User_2.Id = dbo.Property.UserId RIGHT OUTER JOIN
                             dbo.[Case] ON dbo.Property.Id = dbo.[Case].PropertyId LEFT OUTER JOIN
                             dbo.[User] AS User_1 ON dbo.[Case].ResponsibleCompanyUserId = User_1.Id LEFT OUTER JOIN
                             dbo.[User] ON dbo.[Case].CompanyUserId = dbo.[User].Id
    WHERE        (dbo.[Case].DisableNotifications = 0) AND (dbo.[Case].IsDeleted IS NULL) AND (dbo.[Case].OrderNumber IS NOT NULL)
    ),
    cte2 as
    (select TOP (100) PERCENT dbo.[Case].Id AS CaseId, dbo.[Case].State, dbo.[Case].StartDate, dbo.[Case].Description, dbo.[Case].OrderNumber, dbo.[Case].LastUpdatedDate, dbo.[User].Name AS CompanyUserName, 
                     User_1.Name AS ResponsibleCompanyUserName, User_2.Name AS CustomerName, dbo.Property.Address, dbo.[Case].CompanyId, dbo.[Case].PartnerSettingId FROM [dbo].[CaseMessage] where UserId != 55 and [CaseId] = 245 and [ReadTimestamp] IS NULL
    ) select cte1.*,cte2.* from cte1 join cte2 on cte1.CaseId=cte2.CaseId