2016-10-20 1 views
1

ОК, я немного тренируюсь по SQL-запросам здесь, у меня есть таблица с тысячами записей. Каждая строка имеет уникальный идентификатор, но есть столбец с именем EquipmentId, который не является уникальным и будет присутствовать в нескольких строках. Я хочу вернуть 3 строки для каждого EquipmentId, и если есть меньше 3 записей для EquipmentID, я тоже хочу их. ..... смысл? заранее спасибо.Sql Query, чтобы вернуть 3 строки для каждой записи с тем же значением в столбце?

+0

Какие СУБД вы используете? (Ответ может зависеть от продукта, который вы используете.) – jarlh

+0

@ Ultrazz008, это не (ANSI) SQL, или правильный ответ. – jarlh

+0

MS SQL Server Management Studio – mkell

ответ

2

Использование ROW_NUMBER()+CTE

;WITH CTE AS(
    SELECT *, 
      ROW_NUMBER() OVER (PARTITION BY EquipmentId ORDER BY ID) RN 
    FROM TableName 
) 
SELECT * 
FROM CTE 
WHERE RN <= 3 
ORDER BY EquipmentId  
+0

Просто добавьте к этому способ группировки возвращаемых значений, чтобы я мог видеть записи, сгруппированные в 3. – mkell

+1

Работает очарование, спасибо – mkell

0

Использование подзапросов Вы можете сделать это следующим образом:

SELECT * 
FROM 
    (SELECT *, Rank() 
    OVER 
     (PARTITION BY equipmentid 
      ORDER BY ID) Rank 
    FROM stack) AS a 
WHERE 
    rn <= 3