2013-12-20 10 views
0

На некоторое время возникла проблема. Я даю вам и пример ниже.Отфильтровать значение одного столбца в зависимости от другого значения столбца

У меня есть эта таблица

ID  | Dip | Azi | 
SV12360 |-45 | 229.3 | 
SV12360 |-45.1 | 228.3 | 
SV12360 |-44.8 | 223.3 | 
SV12359 |-39 | 249.3 | 
SV12359 |-39.4 | 279.3 | 
SV12357 |-55 | 290.3 | 
SV12357 |-57 | 210.3 | 
SV12318 |-47 | 212.3 | 
SV12318 |-47.2 | 241.3 | 
SV12317 |-41 | 289.3 | 
SV12317 |-40 | 211.3 | 
------------------------- etc. 

Я хотел бы создать запрос, который даст мне только первое значение для каждого ID. Например, в этом случае я хотел бы видеть отдельный идентификатор с первым значением Dip и Azi.

ID  Dip Azi 
SV12360 | -45 | 229.3 
SV12359 | -39 | 249.3 
SV12357 | -55 | 290.3 

И т.д. Таблица содержит около 19000 строк с и я не хочу, чтобы вручную копировать-вставить значения для каждого идентификатора.

+0

row_number() над (раздел по идентификатору заказа по DIP) в качестве ROWNUM то где ROWNUM = 1 – KumarHarsh

ответ

1
SELECT t2.* 
FROM (
     SELECT DISTINCT ID 
     FROM <yourTable> 
     ) t1 
CROSS APPLY 
     (
     SELECT TOP 1 * 
     FROM <yourTable> t 
     WHERE t.ID = t1.id 
     --ORDER BY <column> --you can specify which record is first    
     ) t2 
+0

отлично работает! Почему я не подумал об этом. Спасибо! – user3121776

0
try below 



WITH ABC AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY id ORDER BY ID)'rank' FROM TBL) 

    SELECT * FROM ABC 
    WHERE rank= 1 

ИЛИ

select * from(
(SELECT *,ROW_NUMBER() OVER(PARTITION BY ID ORDER BY ID)'rank' 
      FROM TBL) 
      )tmp where rank=1 
+0

Спасибо, работает как обаяние этих. – user3121776

Смежные вопросы