2013-05-22 3 views
1

позволяет сказать, что у меня есть представление, содержащее следующие данныеВыберите Distinct из просмотра

Name  Image 
---- ---------- 
A   Image1 
A   Image2 
A   Image3 
B   Image4 
B   Image5 

Теперь то, что я хочу, чтобы выбрать только одну строку для каждого имени, не имеет значения, я просто хочу, чтобы результат быть, например:

Name  Image 
---- ---------- 
A   Image1 
B   Image4 

другой сценарий может быть ближе к тому, что мне нужно вот что, если мы взяли на сайт, который продает продукты каждый продукт имеет несколько изображений, как выбрать только одно изображение, которое будет отображаться в качестве прикрытия (позволяет скажем, первый). Я использовал Distinct, но он не работает, потому что каждая строка имеет другое изображение.

Спасибо,

Раш

ответ

2

Для данных в вашем вопросе, простая агрегация будет делать:

select name, min(image) 
from t 
group by name 

Если у вас есть несколько столбцов и хотят все строки из тех же стол:

select t.* 
from (select t.*, 
      row_number() over (partition by name order by newid()) as seqnum 
     from t 
    ) t 
where seqnum = 1; 

Функция row_number() присваивает порядковый номер всем строкам с тем же именем. order by newid() выполняет случайный сортировку.

+0

Большое спасибо ... это именно то, что мне нужно :) – salRad

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