简体   繁体   English

在SQL Server中对数据进行分组

[英]Grouping data in SQL Server

Please Consider the following table : 请考虑下表:

替代文字

As you can see the Name column has some repeated values with is a group like I need to have a query so I can fetch just the first row of a group something like this: 如您所见,“ Name列具有一些重复的值,是一个类似我需要进行查询的组,因此我可以仅获取组的第一行,如下所示:

替代文字

Please take in to account that I need the fastest way because the real table is not like that and could have lots of data to be filter that way. 请考虑到我需要最快的方法,因为真正的表不是那样,并且可能有很多数据需要这种方式进行过滤。

Thanks in advance. 提前致谢。

this depends greatly on how you define 'the first in the group' 这很大程度上取决于您如何定义“组中的第一个”

something like this: 这样的事情:

select name, min(code)
from mytable
group by name
order by name

Assuming the table name is test (change to match yours), try this 假设表名是test(更改为匹配你的名称),试试这个

CREATE TABLE [dbo].[test](
    [name] [varchar](3) NULL,
    [code] [varchar](5) NULL,
    [RowNumber] [int] NOT NULL,
 CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED 
(
    [RowNumber] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]


INSERT INTO [test] ([name],[code],[RowNumber])VALUES('A1','AED',1)
INSERT INTO [test] ([name],[code],[RowNumber])VALUES('A1','BG',2)
INSERT INTO [test] ([name],[code],[RowNumber])VALUES('A1','WS',3)
INSERT INTO [test] ([name],[code],[RowNumber])VALUES('A2','CER',4)
INSERT INTO [test] ([name],[code],[RowNumber])VALUES('A2','HJY',5)
INSERT INTO [test] ([name],[code],[RowNumber])VALUES('A5','OLP',6)
INSERT INTO [test] ([name],[code],[RowNumber])VALUES('A6','LOO',7)
INSERT INTO [test] ([name],[code],[RowNumber])VALUES('A6','AED',8)

SELECT a.*
FROM   dbo.test a
       INNER JOIN(SELECT name,
                         MIN(rownumber) AS rownumber
                  FROM   dbo.test
                  GROUP  BY name) b
         ON a.name = b.name
            AND a.rownumber = b.rownumber
ORDER  BY a.name 

If the RowNumber column is always going to be sequential the put an index on that column. 如果RowNumber列总是要连续的,则在该列上放置一个索引。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM