我有一个非常大的查询,我需要在一个逗号分隔的列表我与子查询实现这个像这样:如何在子查询中使用不同子句的列进行排序?
STUFF((SELECT distinct ',' + t1.Name
FROM t2
inner join t1 ON t1.ID = t2.ID
WHERE t2.otherField = 12345
ORDER BY t2.ID
FOR XML PATH(''), TYPE).value('.','VARCHAR(max)'), 1, 1, '') as talentName
在我需要添加一个不同的条款这种特殊情况下(如图示)。但是,当我这样做时,出现以下错误:
Msg 145, Level 15, State 1, Line 2
ORDER BY items must appear in the select list if SELECT DISTINCT is specified.
我明白为什么会出现此错误,但我不知道该怎么办。 t2.ID不能包含在select语句中,因为它会作为结果集的一部分返回。我无法删除order by子句,因为逗号分隔列表必须与我生成ID的另一个列表匹配。
我该如何确保这个逗号分隔的列表既是独特的,又是正确的顺序?
最终目标
为了帮助澄清什么,我试图完成,这个查询将拉动t1.name和t1.ID.两个逗号分隔的列表我目前在两个单独的STUFF语句中执行此操作,但是如果有其他方法,我会对它开放。这个查询将返回几千行,所以我试图找到一个基于集合的解决方案,以避免每次加载我们的网页时运行数千个即席查询。
所以目前看来没有任何保证只有一个t2.id可以存在于特定的t1.name中。这是否强制执行?如果没有哪个id应该用于排序? –
@MartinSmith道歉;这是在数据库中强制执行的。在ID上加入t1和t2之间有1:1的关系。我编辑了这个问题以纠正列名中的不匹配。 – Nicholas
在t1中是否是唯一的名称? –