2010-11-22 5 views
0

S'il vous plaît Considérez le tableau suivant:Groupement de données dans SQL Server

alt text

Comme vous pouvez le voir la colonne Name a des valeurs répétées avec un groupe comme je dois avoir une requête que je peux chercher que la première ligne d'un groupe quelque chose comme ceci:

alt text

S'il vous plaît prendre pour compte que j'ai besoin le plus rapide parce que la vraie table est pas comme cela et pourrait avoir beaucoup de données à filtrer de cette façon.

Merci d'avance.

Répondre

2

cela dépend grandement de la façon dont vous définissez la première dans le groupe '

quelque chose comme ceci:

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

les performances seront correctes en général. vous shuold probablement envisager un index sur le nom, les colonnes de code – Randy

0

En supposant que le nom de la table est test (changement à correspondre à la vôtre), essayez cette

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 

Si la colonne RowNumber est toujours séquentielle, placez un index sur cette colonne.