我在下方查询中添加了不同的关键字。但是,如果指定了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, '') + ']'
答案 0 :(得分:0)
有关错误消息的不清楚之处?
您选择
'],[' + t2.Description
然后你排序
'],[' + CONVERT(Varchar, t2.SortOrder)
所以你的ORDER BY项不在你的SELECT中。
我猜SQL如果重复项不能以有意义的方式定位,就不知道如何区分唯一的行(不知道,或者更确切地说,拒绝这样做,因为效率极低。)
如果您的ORDER BY可用于查找重复条目,则可以轻松(快速)消除重复记录。但是你要在一个不同的字段上一起订购,所以为了找到重复项,每个记录都需要搜索完整的列表,以确定它是否有重复。
由于您选择XML,我认为您不能轻易地在您的select子句中输入您的订单。
所以你还有其他选择:
删除顺序(您的xml是否真的有必要订购?如果是,请将SortOrder作为xml中的属性包括在内?)
删除distinct(您必须稍后从xml中删除重复的节点)
首先创建一个没有重复项的临时表,然后从那里选择您订购的数据。