2010-12-08 13 views
0

私はいくつかの列のSQLクエリを取得する必要があります。次に、この回答を1つの列の「別個の」値でフィルタリングする必要がありますが、出力ではすべての列を持つ必要があります。誰か助けてくれますか? Order by節は私にとっては答えではありません。1つの列の値で行をフィルタリングする方法は?

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

上記は単純な行出力です。 3列目をご覧ください。私たちは、どれくらいの行を持っているのかわからないとしましょう。私は3列目に異なる値を持つ行だけを選択する必要があります。 (C、G、Z) - "C"行から誰かをフィルタリングする必要があります。

+0

あなたのクエリおよび/またはテーブル定義を投稿することができますか? –

+1

あなたの例では、行1と3は3番目に値Cを持ちます。カラム。あなたの最終的な結果にどの列(1または3)を持ちたいのですが、それはなぜですか? –

+0

私はこれらの行のどれが必要か気にしません。それらのいずれか。 – truthseeker

答えて

3

col3を使用して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 UPまたはCUBEは、GROUP BYに基づいてデータを集計(つまり小計)して個々の行を返すことができるため、問題に役立ちます。

関連する問題