按组外的列排序

Order by Column Outside of Group By

我试图按我不想在 Group By 子句中使用的列进行排序。

所以这里的想法是能够通过这个FileId来订购。

SELECT FileGuid, FileName, ROW_NUMBER() OVER(Order by FileId) AS rownum
FROM dbo.FileImport
GROUP BY FileGuid, FileName
ORDER BY rownum

现在我收到这个错误:

Column 'dbo.FileImport.FileId' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

但是如果我将其包含在分组依据中,我将获得与该 FileGuid 关联的每个文件的记录,这是我不希望发生的。在此先感谢您提供有关如何使它正常工作的任何意见。

你可以试试这个:

SELECT * FROM 
(SELECT FileGuid, FileName, ROW_NUMBER() OVER(Partition by FileGuid, FileName
Order by FileId) AS rownum
FROM dbo.FileImport) X
WHERE rownum = <<your condition>>
ORDER BY X.FileGuid,X.FileName,X.rownum

通过添加外部 where 子句,任何类型的过滤器都可以应用于 rownum。

您必须决定您关心哪个 fileid。然后你可以使用聚合函数:

SELECT FileGuid, FileName, ROW_NUMBER() OVER (Order by MIN(FileId)) AS rownum
FROM dbo.FileImport
GROUP BY FileGuid, FileName
ORDER BY rownum;

您可以使用此 SQL 语句。

Select *
From 
(
  SELECT T.FileGuid, T.FileName, ROW_NUMBER() OVER(Order by T.FileId) AS rownum 
  from (
     SELECT FileGuid, FileName, Max(FileID) As FileID
     FROM dbo.FileImport
     GROUP BY FileGuid, FileName
  )T
)Temp
order by Temp.rownum

如有问题请告诉我!