2010-12-08 4 views
0

Мне нужно получить несколько столбцов из sql-запроса. Затем я должен отфильтровать этот ответ «разными» значениями одного столбца, но на выходе мне нужно иметь все столбцы, а не только значения, которые должны быть разными. Кто-нибудь может мне помочь? Порядок заказа не является для меня ответом.Как фильтровать строки по значениям одного столбца?

A,B,C,D 
E,F,G,H 
I,J,C,L 
M,N,Z,H 

Выше простого выхода строк. Посмотрите на 3-ей колонке. Предположим, что мы не знаем, сколько строк у нас есть. Мне нужно выбрать только строки, которые имеют различное значение в третьем столбце. (C, G, Z). Нам нужно отфильтровать любого из строк «C».

+0

Вы можете разместить свой запрос и/или определение таблицы? – 2010-12-08 20:25:14

ответ

3

Я произвольно решил использовать col1 для разрыва связей на col3. Вы можете отрегулировать часть order bypartition в соответствии с вашими потребностями.

/* Set up test data */ 
declare @test table (
    col1 char(1), 
    col2 char(1), 
    col3 char(1), 
    col4 char(1) 
) 

insert into @test 
    (col1, col2, col3, col4) 
    select 'A','B','C','D' union all 
    select 'E','F','G','H' union all 
    select 'I','J','C','L' union all 
    select 'M','N','Z','H' 

/* Here's the query */ 
;with cteRowNumber as (
    select col1, col2, col3, col4, 
      row_number() over (partition by col3 order by col1) as RowNumber 
     from @test 
) 
select col1, col2, col3, col4 
    from cteRowNumber 
    where RowNumber = 1 

Возвращает

col1 col2 col3 col4 
---------------------------- 
A  B  C  D 
E  F  G  H 
M  N  Z  H 
0

ROLL UP или CUBE может быть полезен для вашей проблемы, поскольку они могут агрегировать (то есть промежуточные) данные на основе GROUP BY и все равно возвращать отдельные строки.

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