2016-07-01 4 views
0

을 비교하여 값의 목록을 분리 I는 입력에주파수

.. 내가 많은 생각을하지 않아도 SQL로 새로운 오전 .. 미만 하나 개의 주파수처럼 와야 출력을 설정 울부 짖는 소리 데이터를 전 3 번 1, 2 번 2, 3 번 3 번, 2 번 4. 출력 2 번 1 번, 1 번 2 번, 2 번 3 번, 1 번 4 번 출력을 원한다. 12.

이 출력을 얻는 방법 !!

enter image description here

+0

당신이 지금까지 시도한 것은 무엇입니까? – Sankar

+0

출력에 중복 값이 ​​포함될 수 있습니까? 그렇다면 규칙은 무엇입니까? –

+0

입력에 3 번 1, 2 번 2 번, 3 번 3 번, 2 번 4. 출력 2 번 1 번, 1 번 2 번, 2 번 3 번, 1 번 4 번 .. –

답변

1

이 좀 더 컴팩트 한 형태로 작성하지만, 단지 명확성을 위해 할 수 있습니다 SQL: Repeat a result row multiple times...

jpw 구현 에서 가져온 행을 복제 할

With Src As (  --< Source table 
    Select * From (Values (1),(2),(3),(1),(1),(2),(3),(3),(4),(4),(5)) V (Id) 
), Numbers As (  --< Auxiliary table with numbers from 1 to maximum row count of Src 
    Select ROW_NUMBER() Over (Order By Id) As N From Src 
), Counted As (  --< Calculate current number of ID occurances 
    Select Id, Count(Id) As Cnt From Src Group By Id 
) 
    Select Id 
    From Counted     --< From distinct list of IDs 
    Inner Join Numbers   --< replicate each row 
    On Numbers.N < Counted.Cnt --< one less time than the Cnt 

식 (주시기 바랍니다 자신의 답변에 복사) :

With Src As (        --< Source table 
    Select * From (Values (1),(2),(3),(1),(1),(2),(3),(3),(4),(4),(5)) V (Id) 
), Numbered As (       --< Number ID occurances 
    Select Id, row_number() Over (Partition By id Order By id) As n From Src 
) 
    Select Id From Numbered Where n > 1  --< Take one off 
+0

다음 질문에 대한 설명에 대한 설명을 –

+2

으로 업데이트했습니다. row_number 함수에서 데이터를 분할하고 숫자가 1 인 행을 필터링 할 수 있습니다. 더 효율적이어야합니다 : ( select num, row_number()와 같은 숫자와 같은 것 id id by id)를 src에서 n으로 사용합니다. ) 숫자에서 id를 선택하십시오. 여기서 n <> 1'은 내 테스트에서 더 나은 실행 계획을 렌더링합니다. – jpw

+1

@jpw 좋은 생각! 나는 확실히 그것을 upvote 것입니다. ;-) –