2010-12-08 3 views
0

몇 가지 열 양식 SQL 쿼리를해야합니다. 그런 다음이 답변을 한 열의 "고유 한"값으로 필터링해야하지만 출력에서 ​​모든 열을 가질 필요가 있습니다.이 값은 고유해야합니다. 아무도 나를 도울 수 있습니까? Order by 절은 나를위한 대답이 아닙니다.하나의 열 값으로 행을 필터링하는 방법은 무엇입니까?

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

위는 간단한 행 출력입니다. 제 3 칼럼을보십시오. 우리는 얼마나 많은 행을 가지고 있는지 알지 못한다고 가정 해 봅시다. 세 번째 열에 고유 값이있는 행만 선택해야합니다. (C, G, Z) - 우리는 "C"행에서 누구를 필터링해야합니다.

+0

당신이 당신의 쿼리 및/또는 테이블 정의를 게시 할 수 있습니까? –

+1

예를 들어, 행 1과 3은 3 번째 값이 C입니다. 기둥. 최종 결과에서 어떤 행 (1 또는 3)을 가지려고 했습니까? 그 이유는 무엇입니까? –

+0

내가 필요한 행을 상관하지 않습니다. 그들 중 하나. – truthseeker

답변

3

col3을 사용하여 col3의 연결 고리를 끊기로했습니다. 사용자의 필요에 맞게 의 order 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 또는 CUBEGROUP BY을 기반으로 데이터를 집계 (즉 부분합)하여 개별 행을 반환 할 수 있으므로 문제 해결에 도움이됩니다.

관련 문제