代码之家  ›  专栏  ›  技术社区  ›  Shawn

分组依据之外的按列排序

  •  1
  • Shawn  · 技术社区  · 7 年前

    我正在尝试按我不想在中使用的列排序 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”列。文件导入。FileId“”在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中。

    但如果我将其包括在group by中,我将获得与该FileGuid关联的每个文件的记录,这是我不希望发生的。提前感谢您对我如何使其工作的任何意见。

    3 回复  |  直到 7 年前
        1
  •  3
  •   Gordon Linoff    7 年前

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

    SELECT FileGuid, FileName, ROW_NUMBER() OVER (Order by MIN(FileId)) AS rownum
    FROM dbo.FileImport
    GROUP BY FileGuid, FileName
    ORDER BY rownum;
    
        2
  •  0
  •   Zulfiqar Ali    7 年前

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

    如果有问题,请告诉我!

        3
  •  0
  •   nee21    7 年前

    您可以尝试以下操作:

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