Tsql 如果指定了select DISTINCT,则ORDER BY项目必须出现在选择列表中
如果指定了select DISTINCT,则上述查询是错误的,ORDER BY项目必须出现在选择列表中 .但如果我删除DISTINCT,则会运行此查询 我希望确保清晰性,并且我还希望通过createddate DESC保持排序顺序 我的一个相关职位是Tsql 如果指定了select DISTINCT,则ORDER BY项目必须出现在选择列表中,tsql,Tsql,如果指定了select DISTINCT,则上述查询是错误的,ORDER BY项目必须出现在选择列表中 .但如果我删除DISTINCT,则会运行此查询 我希望确保清晰性,并且我还希望通过createddate DESC保持排序顺序 我的一个相关职位是 基本上是告诉查询按不存在的字段对输出进行排序 必须将createddate放入select语句中,或者可以按tagid、[Description]和createddate分组,并按createddate排序 现在,如果您觉得在包含distinct
基本上是告诉查询按不存在的字段对输出进行排序 必须将createddate放入select语句中,或者可以按tagid、[Description]和createddate分组,并按createddate排序
现在,如果您觉得在包含distinct createddate时可能会得到重复的标记ID和描述,请围绕该标记ID和描述包装另一个查询,并仅对这两个字段执行前10个distinct操作。您基本上是告诉查询按不存在的字段对输出进行排序 必须将createddate放入select语句中,或者可以按tagid、[Description]和createddate分组,并按createddate排序
现在,如果您觉得在包含distinct createddate时可能会得到重复的标记ID和描述,那么请围绕它包装另一个查询,并仅在这两个字段上执行前10个distinct操作。好的,因此我们只关心基于最近创建日期的每个标记,因此我们可以将内部查询构造为:
declare @userid int
set @userid=9846
SELECT TOP 10
tagid,
[Description]
FROM tagsuggestion
WHERE tagid IN (SELECT **DISTINCT** TOP 10 tagid
FROM (SELECT ulpt.tagid,
createddate
FROM userlocationposttag ulpt
WHERE ulpt.UserID=@userid
UNION ALL
SELECT ult.tagid,
createddate
FROM userlocationtag ult
WHERE ult.UserID=@userid
UNION ALL
SELECT upt.tagid,
createddate
FROM userprofiletag upt
WHERE upt.UserID=@userid
) T
ORDER BY createddate DESC)
然后我们可以将其包装在另一个子选择中,并应用前十名:
SELECT tagid,MAX(createddate) as createddate FROM (
SELECT ulpt.tagid,
createddate
FROM userlocationposttag ulpt
WHERE ulpt.UserID=@userid
UNION ALL
SELECT ult.tagid,
createddate
FROM userlocationtag ult
WHERE ult.UserID=@userid
UNION ALL
SELECT upt.tagid,
createddate
FROM userprofiletag upt
WHERE upt.UserID=@userid
) t
GROUP BY tagid
我们不再需要区分(因为
GROUP BY
和MAX
已经确保每个标记只出现一次)好的,因此我们只关心每个标记的最新创建日期,因此我们可以将内部查询构造为:
declare @userid int
set @userid=9846
SELECT TOP 10
tagid,
[Description]
FROM tagsuggestion
WHERE tagid IN (SELECT **DISTINCT** TOP 10 tagid
FROM (SELECT ulpt.tagid,
createddate
FROM userlocationposttag ulpt
WHERE ulpt.UserID=@userid
UNION ALL
SELECT ult.tagid,
createddate
FROM userlocationtag ult
WHERE ult.UserID=@userid
UNION ALL
SELECT upt.tagid,
createddate
FROM userprofiletag upt
WHERE upt.UserID=@userid
) T
ORDER BY createddate DESC)
然后我们可以将其包装在另一个子选择中,并应用前十名:
SELECT tagid,MAX(createddate) as createddate FROM (
SELECT ulpt.tagid,
createddate
FROM userlocationposttag ulpt
WHERE ulpt.UserID=@userid
UNION ALL
SELECT ult.tagid,
createddate
FROM userlocationtag ult
WHERE ult.UserID=@userid
UNION ALL
SELECT upt.tagid,
createddate
FROM userprofiletag upt
WHERE upt.UserID=@userid
) t
GROUP BY tagid
而且我们不再需要distinct(因为
GROUP BY
和MAX
已经确保每个标记只出现一次)“如果指定select distinct,则ORDER BY items必须出现在选择列表中”-您确实意识到,如果如您所说,删除distinct,则此短语不再适用。。。(如果指定了Y,则需要X-并且您已删除了Y)另外,SQL Server的版本是什么?因此您的第一个问题对您的实际问题具有误导性?@Damien_The_unsiver:SQL Server 2005“如果指定了select DISTINCT,则ORDER BY items必须出现在选择列表中”-您确实意识到,如果,如您所说,您删除了DISTINCT,这句话不再适用。。。(如果指定了Y,则需要X-并且您已经删除了Y)另外,SQL Server的版本是什么?那么您的第一个问题对您的实际问题具有误导性?@Damien_The_unsiever:SQL Server 2005