Sql 为XML添加order by时抛出错误

Sql 为XML添加order by时抛出错误,sql,xml,sql-server-2008,tsql,Sql,Xml,Sql Server 2008,Tsql,这是我的实际问题 SELECT aces.ProductID,'<p>' + Replace(STUFF((SELECT DISTINCT ', ' + CAST(A.year AS VARCHAR(4)) + ' ' + A.make + ' ' + A.model + ' ' + A.enginebase_new FROM ACES_Data A WHERE A.ProductI

这是我的实际问题

SELECT 
    aces.ProductID,'<p>' +  
    Replace(STUFF((SELECT DISTINCT ', ' + CAST(A.year AS VARCHAR(4)) + ' ' + A.make + ' ' + A.model + ' ' + A.enginebase_new 
                   FROM ACES_Data A 
                   WHERE A.ProductID = aces.ProductID 
                   FOR XML PATH('')), 1, 1, ''), ',', '<br>')
           + '</p><p>' + i.[Subline Code] + '<br>' + i.[Subline Name] + '</p>' AS FullDescription 
FROM
    ACES_Data aces 
LEFT OUTER JOIN
    InventoryPricing i ON aces.part_number = i.PART  
WHERE 
    aces.ProductID IS NOT NULL
    AND aces.MakeModelMappingID IS NOT NULL
GROUP BY 
    aces.ProductID, i.[Part Description], i.[Subline Code], i.[Subline Name]
它给我错误的感觉

如果指定了select DISTINCT,则ORDER BY项目必须出现在选择列表中


由于
enginebase\u new
model
不属于
Order by
的一部分,您不能在
选择中使用
DISTINCT

使用
groupby
而不是
DISTINCT
删除重复项

SELECT ', ' + Cast(A.year AS VARCHAR(4)) + ' ' + A.make
       + ' ' + A.model + ' ' + A.enginebase_new
FROM   ACES_Data A
WHERE  A.ProductID = aces.ProductID
GROUP  BY A.year,
          A.make,
          A.model,
          A.enginebase_new
ORDER  BY A.make,
          A.year ASC
FOR XML PATH('') 

由于
enginebase\u new
model
不属于
Order by
的一部分,您不能在
选择中使用
DISTINCT

使用
groupby
而不是
DISTINCT
删除重复项

SELECT ', ' + Cast(A.year AS VARCHAR(4)) + ' ' + A.make
       + ' ' + A.model + ' ' + A.enginebase_new
FROM   ACES_Data A
WHERE  A.ProductID = aces.ProductID
GROUP  BY A.year,
          A.make,
          A.model,
          A.enginebase_new
ORDER  BY A.make,
          A.year ASC
FOR XML PATH('') 

您没有使用MySQL、Oracle和SQL Server。请只为您实际使用的RDM添加标记。您还应该格式化您的查询,因为这里的大多数用户对读取像我现在格式化的查询那样的长字符串不感兴趣,但请确保以后您总是在这个平台上格式化查询。您不使用MySQL、Oracle和SQL Server。请仅为您实际使用的RDM添加标记。您还应设置查询格式,因为此处的大多数用户对读取像我现在设置的查询格式这样的长字符串不感兴趣,但请确保以后您始终在此平台上设置查询格式。在选择列表中,将错误显示为列“ACES\u Data.year”无效因为它不包含在聚合函数或GROUP BY子句中。在删除+''+表单查询时,我面临的问题是“列'ACES_Data.make'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。”我面临的第二个问题如何?“列'ACES_Data.make'在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中。”。“@Xtremcool-单独运行此查询并首先检查。。在您的查询中不要替换实际上问题只针对年份而不是Make显示错误作为列“ACES_Data”。年份在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。在删除+''+表单查询时,我面临的问题是“列'ACES_Data.make'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。“我面临的第二个问题如何?”列'ACES_Data.make'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。“@Xtremcool-单独运行此查询并首先检查。。不要在你的疑问中替换。事实上,问题只会在一年内出现,而不是制造
SELECT ', ' + Cast(A.year AS VARCHAR(4)) + ' ' + A.make
       + ' ' + A.model + ' ' + A.enginebase_new
FROM   ACES_Data A
WHERE  A.ProductID = aces.ProductID
GROUP  BY A.year,
          A.make,
          A.model,
          A.enginebase_new
ORDER  BY A.make,
          A.year ASC
FOR XML PATH('')