2016-04-25 7 views
1

Ich habe eine Tabelle mit Namen und ich möchte eine weitere Spalte "Gruppe" generieren, die alle 5 Datensätze um 1 erhöht. Unten ist ein Beispiel für die gewünschte Ausgabe.SQL Update Segment von 5 Records

Name Group 
Joe  1 
Frank 1 
Susan 1 
Tom  1 
Kim  1 
Mike 2 
John 2 
Henry 2 
Rick 2 
Quinn 2 
+1

Welche Version von SQL helfen sind Sie mit ? Und wie möchte ich diese Leute bestellen, um eine Gruppierung zu generieren (es muss eine Ordnung geben, glaube ich)? –

+0

Ich benutze MS SQL Server 2014. Sie können alphabetisch geordnet werden. –

Antwort

1

einen CTE mit Zeilennummer anlegen werden

;WITH cte AS 
(
    SELECT 
    Name, 
    ROW_NUMBER() OVER (ORDER BY Name) AS RowNum 
    FROM YourTable 
) 

SELECT 
    Name, 
    (RowNum - 1)/5 + 1 AS [Group] 
FROM cte 
0

Sie könnten versuchen, so etwas wie diese

select a.name, 
    case when (a.myrow%5=0) then 5 else a.myrow%5 end as group 
    from 
    (select name,row_number() over (order by name) as myrow from YourTable)a 
0

Einen anderen Ansatz

Create table #tmpNames 
(
    Name1 varchar(100) 
) 

Insert INTO #tmpNames 
(Name1) 
VALUES 
('Joe'), 
('Frank'), 
('Susan'), 
('Tom'), 
('Kim'), 
('Mike'), 
('John'), 
('Henry'), 
('Rick'), 
('Quinn') 


Select Name1 
    ,ROUND(rowCnt/6, 0, 1) + 1 as 'grp' 
From (
    Select 
     Name1 
     ,ROW_NUMBER() over (order by Name1) as 'rowCnt' 
    From #tmpNames 
    ) a