Sql 如何使以下仅显示实例>1
我在一个生成临时表的存储过程中有一个查询 我需要它只显示超过1行的应用程序,并且我需要为每个重复条目显示一行 这就是我到目前为止所拥有的,我如何才能让它发挥作用Sql 如何使以下仅显示实例>1,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我在一个生成临时表的存储过程中有一个查询 我需要它只显示超过1行的应用程序,并且我需要为每个重复条目显示一行 这就是我到目前为止所拥有的,我如何才能让它发挥作用 Select t2.ApplicationName, t3.MainframeDev, t3.MainframeTest, t3.MMX, t3.HMG, t3.WMI, t3.TJXE, 'Changing' as UsedAs, t3.ProjectName,
Select t2.ApplicationName, t3.MainframeDev, t3.MainframeTest, t3.MMX,
t3.HMG, t3.WMI, t3.TJXE, 'Changing' as UsedAs, t3.ProjectName,
t4.FirstName+' '+LastName as ProjectLead,t3.Status,
CONVERT(varchar(20),t3.ImplementationDate,126) as ImplementationDate
from ImpactedApplications t1
inner join Applications t2 on t2.AppID = t1.AppID
inner join Projects t3 on t3.ProjectID = t1.ProjectID
inner join Employees t4 on t3.ProjectLead = t4.EmpId
where t2.ApplicationName <> 'NA'
UNION
Select t2.ApplicationName, t3.MainframeDev, t3.MainframeTest, t3.MMX,
t3.HMG, t3.WMI, t3.TJXE, 'Supporting' as UsedAs, t3.ProjectName,
t4.FirstName+' '+LastName as ProjectLead,t3.Status,
CONVERT(varchar(20),t3.ImplementationDate,126) as ImplementationDate
from SupportingApplications t1
inner join Applications t2 on t2.AppID = t1.AppID
inner join Projects t3 on t3.ProjectID = t1.ProjectID
inner join Employees t4 on t3.ProjectLead = t4.EmpId
where t2.ApplicationName <> 'NA'
Order By ApplicationName, MainframeDev, UsedAs ASC
如果您想要获得所有重复的行或所有具有多个条目的应用程序,那么我认为您只需要GROUPBY子句和Having子句来解决这个问题 将查询的输出放在临时表(比如应用程序)中,然后
因为我没有你的基本表,这有点像是在黑暗中拍摄的:
;WITH
cte1 AS (
Select t2.ApplicationName, t3.MainframeDev, t3.MainframeTest, t3.MMX,
t3.HMG, t3.WMI, t3.TJXE, 'Changing' as UsedAs, t3.ProjectName,
t4.FirstName+' '+LastName as ProjectLead,t3.Status,
CONVERT(varchar(20),t3.ImplementationDate,126) as ImplementationDate
from ImpactedApplications t1
inner join Applications t2 on t2.AppID = t1.AppID
inner join Projects t3 on t3.ProjectID = t1.ProjectID
inner join Employees t4 on t3.ProjectLead = t4.EmpId
where t2.ApplicationName <> 'NA'
UNION
Select t2.ApplicationName, t3.MainframeDev, t3.MainframeTest, t3.MMX,
t3.HMG, t3.WMI, t3.TJXE, 'Supporting' as UsedAs, t3.ProjectName,
t4.FirstName+' '+LastName as ProjectLead,t3.Status,
CONVERT(varchar(20),t3.ImplementationDate,126) as ImplementationDate
from SupportingApplications t1
inner join Applications t2 on t2.AppID = t1.AppID
inner join Projects t3 on t3.ProjectID = t1.ProjectID
inner join Employees t4 on t3.ProjectLead = t4.EmpId
where t2.ApplicationName <> 'NA'
), cte2 AS (
SELECT *, AppCount = COUNT(ApplicationName) OVER (PARTITION BY ApplicationName)
FROM cte1
)
SELECT *
FROM cte2
WHERE AppAcount > 1
@havenodisplayname完成。
Create table #application(appid int, aapvname varchar(50))
insert into #application values (1,'100'),(1,'101'),(2,'200'),(2,'201'),(3,'300'),(4,'400')
Select *
From #application
WHERE appid IN (
Select appid
From #application
GROUP BY appid
Having COUNT(*) > 1)
;WITH
cte1 AS (
Select t2.ApplicationName, t3.MainframeDev, t3.MainframeTest, t3.MMX,
t3.HMG, t3.WMI, t3.TJXE, 'Changing' as UsedAs, t3.ProjectName,
t4.FirstName+' '+LastName as ProjectLead,t3.Status,
CONVERT(varchar(20),t3.ImplementationDate,126) as ImplementationDate
from ImpactedApplications t1
inner join Applications t2 on t2.AppID = t1.AppID
inner join Projects t3 on t3.ProjectID = t1.ProjectID
inner join Employees t4 on t3.ProjectLead = t4.EmpId
where t2.ApplicationName <> 'NA'
UNION
Select t2.ApplicationName, t3.MainframeDev, t3.MainframeTest, t3.MMX,
t3.HMG, t3.WMI, t3.TJXE, 'Supporting' as UsedAs, t3.ProjectName,
t4.FirstName+' '+LastName as ProjectLead,t3.Status,
CONVERT(varchar(20),t3.ImplementationDate,126) as ImplementationDate
from SupportingApplications t1
inner join Applications t2 on t2.AppID = t1.AppID
inner join Projects t3 on t3.ProjectID = t1.ProjectID
inner join Employees t4 on t3.ProjectLead = t4.EmpId
where t2.ApplicationName <> 'NA'
), cte2 AS (
SELECT *, AppCount = COUNT(ApplicationName) OVER (PARTITION BY ApplicationName)
FROM cte1
)
SELECT *
FROM cte2
WHERE AppAcount > 1