Member 12336474 Ответов: 2

Выберите первую строку в каждой группе по группе?


Рассмотрим нижеприведенную таблицу

KEY    WO#    Parts   Name panels
77     11     1       aa     3
77     11     2       aa     4
81     12     2       bb     5
82     9      3       cc     6

Теперь я хочу написать запрос для своего отчета так, чтобы всякий раз, когда есть дубликат RKEY, я хотел, чтобы он игнорировал его, даже если количество частей в дубликате RKEY различно, и переходил к следующему RKEY. Возможно ли это

End result
KEY    WO#    Parts   Name  panels
77     11     1       aa    3
81     12     2       bb    5
82     9      3       cc    6


Что я уже пробовал:

Не совсем уверен, как добиться этого в sql2008

2 Ответов

Рейтинг:
2

OriginalGriff

Попробуй:

SELECT a.[Key], b.[WO#], b.Parts, b.Name, a.Panels FROM 
   (SELECT [Key], MIN(Panels) As Panels FROM MyTable GROUP BY [Key]) a
   JOIN MyTable b 
   ON a.[Key] = b.[Key] AND a.Panels = b.Panels


Рейтинг:
18

Bryian Tan

Вы пробовали функцию Row_Number? Вот пример использования функций CTE и Row_Number.

DECLARE  @temp TABLE ([KEY] INT, WO INT, Parts INT, Name VARCHAR(10), Panels INT)

INSERT INTO @temp
SELECT 77, 11, 1, 'aa' , 3
UNION
SELECT 77, 11, 2, 'aa' , 4
UNION
SELECT 81, 12, 2, 'bb' , 5
UNION
SELECT 82, 9, 3, 'cc' ,6

SELECT * FROM @temp

;WITH temp AS (
SELECT ROW_NUMBER() OVER (PARTITION BY [Key]
                          ORDER BY [Key] DESC
                         ) AS myrownum
       ,*    
from @temp )
SELECT [Key], WO 'WO#', Parts, Name, Panels FROM temp WHERE myrownum = 1


Выход:
Key	WO#	Parts	Name	Panels
77	11	   1	aa	     3
81	12	   2	bb	     5
82	 9	   3	cc	     6


Karthik_Mahalingam

5

jaket-cp

почему не прав с ОТВ примеру?
избранный союз может войти в cte, верно?