SQL Server – Her Grubun içerisinde x kaydı listeleme

By | April 12, 2013

Merhabalar,

Araba marka ve modellerini tuttuğumuz bir tablo olduğunu varsayalım. Birde fiyat bilgimiz olsun. Yapmak istediğimiz her markanın en pahalı 2 modelini getirmek. Diğerlerini istemiyoruz. Aşağıdaki kodlar işinize yarayacaktır.

-- Table ı create edelim
DECLARE @Tablom table
   (  KayitID       int   IDENTITY,
      Marka         varchar(50),
      Model         varchar(50),
      Fiyat         decimal(10,2)
   )

-- Kayıtları ekleyelim

INSERT INTO @Tablom VALUES ( 'Mercedes', 'SLK', 220000 )
INSERT INTO @Tablom VALUES ( 'Mercedes', 'E200', 120000 )
INSERT INTO @Tablom VALUES ( 'Mercedes', 'S500', 320000 )
INSERT INTO @Tablom VALUES ( 'Mercedes', 'C200', 100000 )
INSERT INTO @Tablom VALUES ( 'BMW', '7.50', 440000 )
INSERT INTO @Tablom VALUES ( 'BMW', '3.25', 110000 )
INSERT INTO @Tablom VALUES ( 'BMW', '3.20', 80000 )
INSERT INTO @Tablom VALUES ( 'BMW', '5.25', 240000 )
INSERT INTO @Tablom VALUES ( 'Opel', 'Corsa', 60000 )
INSERT INTO @Tablom VALUES ( 'Opel', 'Vectra', 80000 )

-- Sorgu cümlemiz
SELECT
   KayitID,
   Marka,
   Model,
   Fiyat
FROM (SELECT
         ROW_NUMBER() OVER ( PARTITION BY Marka ORDER BY Fiyat DESC ) AS 'KayitSirasi',
         KayitID,
         Marka,
         Model,
         Fiyat
      FROM @Tablom
      ) t
WHERE KayitSirasi <= 2

Leave a Reply

Your email address will not be published. Required fields are marked *