2010-12-08 104 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上的关系。您可以调整partitionorder by部分以满足您的需求。

/* 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 UPCUBE可能对您的问题有所帮助,因为它们可以基于GROUP BY汇总(即小计)数据,并仍然返回单个行。