如何按一列的值过滤行?

时间:2010-12-08 20:16:50

标签: sql-server sql-server-2005

我需要从sql查询中获取几个列。然后我必须通过一列的“不同”值来过滤这个答案,但是在输出中我需要拥有所有列,而不仅仅是这些值必须是不同的。有谁能够帮我?按条款排序不是我的答案。

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

上面是一个简单的行输出。请看第3栏。我们假设我们不知道我们有多少行。我只需要选择第3列中具有不同值的行。 (C,G,Z) - 我们需要从“C”行过滤任何人。

2 个答案:

答案 0 :(得分:3)

我随意选择使用col1打破col3上的联系。您可以调整order by的{​​{1}}部分以满足您的需求。

partition

返回

/* 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

答案 1 :(得分:0)

ROLL UPCUBE可能对您的问题有所帮助,因为他们可以根据GROUP BY汇总(即小计)数据并仍然返回各个行。