代码之家  ›  专栏  ›  技术社区  ›  Will F

报表中的分组

  •  0
  • Will F  · 技术社区  · 6 年前

    我正在使用t-sql。

    我有4个工作托盘,我想有一个报告,给我每个工作托盘的名称,加上最古老的项目,在它的职位,再加上几个字段。它需要限制为4行-每个工作托盘一行。

    所以现在我有了这个:

    SELECT WorkTray, MIN(Date) AS [OldestDate], RefNo, NameofItem
    
    FROM ...
    
    GROUP BY WorkTray,RefNo, NameofItem
    
    ORDER BY WorkTray,RefNo, NameofItem
    

    但是,当我运行此命令时,它将为我提供每个工作托盘中的每个项目,例如一个项目长度为100的报表-我只希望它限制为4行数据,每个工作托盘一行数据:

    Work Tray    Date                    RefNo                    NameofItem
    
    A                 1/2/15                25                          Outstanding Bill
    
    B                 5/5/18                1000                      Lost post
    
    C                 2/2/12               17                          Misc
    
    D                 6/12/17              876                       Misc
    

    所以我肯定我的团队在某个地方出了问题-但我看不到哪里。

    1 回复  |  直到 6 年前
        1
  •  1
  •   scratt    6 年前

    做这件事有个诀窍 answered on stackoverflow before . 这里它适合您的查询:

    SELECT *
    FROM 
    (SELECT WorkTray, Date AS [OldestDate], RefNo, NameofItem, ROW_NUMBER() OVER (PARTITION BY WorkTray ORDER BY WorkTray, [Date]) AS rn
    FROM MyTable
    ) GroupedByTray
    WHERE rn = 1
    

    分区通过告诉它为每种类型的托盘计算行,并且顺序类似于正常顺序by子句。假设您只有4个工作托盘(A-D),“WHERE rn=1”部分将只返回工作托盘A-D的第一行。