Tsql 与T-SQL中的聚合混淆
好的:这是我的一些表格结构,在这里很重要Tsql 与T-SQL中的聚合混淆,tsql,Tsql,好的:这是我的一些表格结构,在这里很重要 CaseStudyID int Title nvarchar(50) OverrideTitle nvarchar(50) 我程序的一部分 Declare @Temp table(CaseStudyID int, Title nvarchar(50)) Insert Into @Temp SELECT CaseStudyID,Title FROM CaseStudy WHERE Visible = 1 AND Displ
CaseStudyID int
Title nvarchar(50)
OverrideTitle nvarchar(50)
我程序的一部分
Declare @Temp table(CaseStudyID int,
Title nvarchar(50))
Insert Into @Temp
SELECT CaseStudyID,Title
FROM CaseStudy
WHERE Visible = 1 AND DisplayOnHomePage = 1
ORDER BY Title
Update @Temp Set Title = TitleOverride
--Here is where im lost if the title occurs more than once
--I need to replace it with the override
--Schoolboy error or leaking brain I cant get it going
Select * From @Temp
有人能帮忙吗?不使用临时表,您可以通过以下方式实现:
SELECT
MIN(CaseStudyID) AS CaseStudyID,
CASE WHEN count(*) = 1 THEN
MIN(Title)
ELSE
MIN(OverrideTitle)
END AS Title
FROM CaseStudy
GROUP BY Title
ORDER BY Title
您可以通过以下方式实现此目的,而无需使用临时表:
SELECT
MIN(CaseStudyID) AS CaseStudyID,
CASE WHEN count(*) = 1 THEN
MIN(Title)
ELSE
MIN(OverrideTitle)
END AS Title
FROM CaseStudy
GROUP BY Title
ORDER BY Title
我不确定你是否需要原始表格的每一行。下面是我的备选解决方案,它为您提供了每一行:
SELECT CaseStudyID, Title
FROM CaseStudy c1
WHERE NOT EXISTS (
SELECT * FROM CaseStudy c2
WHERE c2.CaseStudyID <> c1.CaseStudyID and c2.Title = c1.Title
)
UNION ALL
SELECT CaseStudyID, OverrideTitle
FROM CaseStudy c1
WHERE exists (
SELECT * FROM CaseStudy c2
WHERE c2.CaseStudyID <> c1.CaseStudyID and c2.Title = c1.Title
)
ORDER BY Title
我不确定你是否需要原始表格的每一行。下面是我的备选解决方案,它为您提供了每一行:
SELECT CaseStudyID, Title
FROM CaseStudy c1
WHERE NOT EXISTS (
SELECT * FROM CaseStudy c2
WHERE c2.CaseStudyID <> c1.CaseStudyID and c2.Title = c1.Title
)
UNION ALL
SELECT CaseStudyID, OverrideTitle
FROM CaseStudy c1
WHERE exists (
SELECT * FROM CaseStudy c2
WHERE c2.CaseStudyID <> c1.CaseStudyID and c2.Title = c1.Title
)
ORDER BY Title
这将用相应的OverrideTile值替换多次出现的每个标题 它将保留第一个出现的标题,例如,如果您有3个标题,如a、a、a,则只替换第二个和第三个标题
select distinct
cs1.CaseStudyID,
case when cs2.CaseStudyID is null then cs1.Title else cs1.overrideTitle end as title
from
CaseStudy cs1
left join CaseStudy cs2
on cs1.title = cs2.title
and cs1.CaseStudyID > cs2.CaseStudyID
如果您想替换所有这些,只需将>更改为如下所示
这将用相应的OverrideTile值替换多次出现的每个标题 它将保留第一个出现的标题,例如,如果您有3个标题,如a、a、a,则只替换第二个和第三个标题
select distinct
cs1.CaseStudyID,
case when cs2.CaseStudyID is null then cs1.Title else cs1.overrideTitle end as title
from
CaseStudy cs1
left join CaseStudy cs2
on cs1.title = cs2.title
and cs1.CaseStudyID > cs2.CaseStudyID
如果您想替换所有这些,只需将>更改为如下所示
如果没有重复,他希望输出标题。如果表中有重复的标题,他想显示我猜的覆盖标题。如果没有重复的标题,他想输出标题。如果表中有一个重复的标题,他想显示我猜的覆盖标题。