簡體   English   中英

在SQL Server中對數據進行分組

[英]Grouping data in SQL Server

請考慮下表:

替代文字

如您所見,“ Name列具有一些重復的值,是一個類似我需要進行查詢的組,因此我可以僅獲取組的第一行,如下所示:

替代文字

請考慮到我需要最快的方法,因為真正的表不是那樣,並且可能有很多數據需要這種方式進行過濾。

提前致謝。

這很大程度上取決於您如何定義“組中的第一個”

這樣的事情:

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

假設表名是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 

如果RowNumber列總是要連續的,則在該列上放置一個索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM