如果在使用distinct时指定了SELECT DISTINCT,则ORDER BY项必须出现在选择列表中

时间:2014-02-07 07:19:50

标签: sql-server-2012

我在下方查询中添加了不同的关键字。但是,如果指定了SELECT DISTINCT,则会出现“ORDER BY项必须出现在选择列表中”之类的错误。

  SELECT @cols = STUFF(( SELECT  distinct TOP 100 PERCENT '],[' + t2.Description
  FROM table1 AS t2 where t2.EntityTypeId=@EntitytypeID
    ORDER BY '],[' + CONVERT(Varchar, t2.SortOrder)
    FOR XML PATH('')
    ), 1, 2, '') + ']'      

1 个答案:

答案 0 :(得分:0)

有关错误消息的不清楚之处?

您选择

'],[' + t2.Description

然后你排序

'],[' + CONVERT(Varchar, t2.SortOrder)

所以你的ORDER BY项不在你的SELECT中。

我猜SQL如果重复项不能以有意义的方式定位,就不知道如何区分唯一的行(不知道,或者更确切地说,拒绝这样做,因为效率极低。)

如果您的ORDER BY可用于查找重复条目,则可以轻松(快速)消除重复记录。但是你要在一个不同的字段上一起订购,所以为了找到重复项,每个记录都需要搜索完整的列表,以确定它是否有重复。

由于您选择XML,我认为您不能轻易地在您的select子句中输入您的订单。

所以你还有其他选择:

  • 删除顺序(您的xml是否真的有必要订购?如果是,请将SortOrder作为xml中的属性包括在内?)

  • 删除distinct(您必须稍后从xml中删除重复的节点)

  • 首先创建一个没有重复项的临时表,然后从那里选择您订购的数据。