按组外排列

时间:2018-03-14 17:31:25

标签: sql-server tsql sql-order-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

现在我收到此错误:

  

列' dbo.FileImport.FileId'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

但是,如果我将其包含在组中,我将获得与该FileGuid关联的每个文件的记录,我不想发生这种情况。提前感谢我对如何使其发挥作用的任何意见。

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

你可以试试这个:

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上应用任何类型的过滤器。

答案 2 :(得分:0)

您可以使用此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

如果有疑问,请告诉我。