我试图通过我不希望在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关联的每个文件的记录,我不想发生这种情况。提前感谢我对如何使其发挥作用的任何意见。
答案 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
如果有疑问,请告诉我。