Sql 将状态检查添加到多表查询
我有一个查询,可以从受影响的表和支持表中查找应用程序。第三个表包含我需要查询的更多项目信息。其中之一是状态字段。我想向该项目表添加一个联接,并且仅当状态显示为“正在进行”时才返回结果。这就是我到目前为止所做的: 数据和列的示例 申请资料如下Sql 将状态检查添加到多表查询,sql,sql-server-2008,Sql,Sql Server 2008,我有一个查询,可以从受影响的表和支持表中查找应用程序。第三个表包含我需要查询的更多项目信息。其中之一是状态字段。我想向该项目表添加一个联接,并且仅当状态显示为“正在进行”时才返回结果。这就是我到目前为止所做的: 数据和列的示例 申请资料如下 Appid ProjectId 197 251 项目信息列如下 projectd项目名称实施日期状态 select AppId = a.AppId, ApplicationName =
Appid ProjectId
197 251
项目信息列如下
projectd项目名称实施日期状态
select AppId = a.AppId,
ApplicationName = a.ApplicationName
from Applications a
left join ( select AppId = t.AppId ,
Cnt = count(*)
from ImpactedApplications t
group by t.AppId
) ia on ia.AppId = a.AppId
left join ( select AppId = t.AppId ,
Cnt = count(*)
from SupportingApplications t
group by t.AppId
) sa on sa.AppId = a.AppId
where sa.Cnt > 0 OR ia.Cnt > 0 ORDER BY ApplicationName ASC
CTE方法
);使用CTE(appid、ApplicationName、ProjectId)
作为
(
工会可能在这里工作
SELECT ApplicationName , P.*
FROM Applications A
INNER JOIN ImpactedApplications IA
on A.AppId = IA.AppId
INNER JOIN Project P
on IA.ProjectId = P.ProjectID
AND P.Status ='InProgress'
UNION
SELECT ApplicationName , P.*
FROM Applications A
INNER JOIN SupportingApplications SA
on A.AppId = SA.AppId
INNER JOIN Project P
on IA.ProjectId = P.ProjectID
AND P.Status ='InProgress'
order by ApplicationName ASC
若我并没有看错您现有的代码,那个么您需要基于这两个表上的projectd将project表和applications表连接起来,并且只需要获取status=InProgress的记录
select AppId = a.AppId,
ApplicationName = a.ApplicationName,
p.*
from Applications a
left join ( select AppId = t.AppId ,
Cnt = count(*)
from ImpactedApplications t
group by t.AppId
) ia on ia.AppId = a.AppId
left join ( select AppId = t.AppId ,
Cnt = count(*)
from SupportingApplications t
group by t.AppId
) sa on sa.AppId = a.AppId
join project p on a.projectid=p.projectid
where (sa.Cnt > 0 OR ia.Cnt > 0 )
and p.status='InProgress'
ORDER BY ApplicationName ASC
您能否提供应用程序、受影响应用程序和支持应用程序的示例数据table@Rajesh在我的原始帖子中添加了带有示例的信息。希望这有帮助!根据专栏更新了我的答案,你能检查一下这是否适用于you@Rajesh当我使用它时,我得到的错误是:Msg 207,级别16,状态1,第7行无效列名“ProjectId”。Msg 8158,级别16,状态1,第1行“CTE”的列数超过了列列表中指定的列数。更新了CTE输出,现在可以尝试吗?您可以演示一下吗?这些表是受影响的应用程序,支持应用程序和Projects@OnceorTwice,根据您的代码,您甚至有一个应用程序表,对吗?以及应用程序和项目t两个项目都有我加入的项目,并将条件status='InProgress'
select AppId = a.AppId,
ApplicationName = a.ApplicationName,
p.*
from Applications a
left join ( select AppId = t.AppId ,
Cnt = count(*)
from ImpactedApplications t
group by t.AppId
) ia on ia.AppId = a.AppId
left join ( select AppId = t.AppId ,
Cnt = count(*)
from SupportingApplications t
group by t.AppId
) sa on sa.AppId = a.AppId
join project p on a.projectid=p.projectid
where (sa.Cnt > 0 OR ia.Cnt > 0 )
and p.status='InProgress'
ORDER BY ApplicationName ASC