을 비교하여 값의 목록을 분리 I는 입력에주파수
.. 내가 많은 생각을하지 않아도 SQL로 새로운 오전 .. 미만 하나 개의 주파수처럼 와야 출력을 설정 울부 짖는 소리 데이터를 전 3 번 1, 2 번 2, 3 번 3 번, 2 번 4. 출력 2 번 1 번, 1 번 2 번, 2 번 3 번, 1 번 4 번 출력을 원한다. 12.
이 출력을 얻는 방법 !!
을 비교하여 값의 목록을 분리 I는 입력에주파수
.. 내가 많은 생각을하지 않아도 SQL로 새로운 오전 .. 미만 하나 개의 주파수처럼 와야 출력을 설정 울부 짖는 소리 데이터를 전 3 번 1, 2 번 2, 3 번 3 번, 2 번 4. 출력 2 번 1 번, 1 번 2 번, 2 번 3 번, 1 번 4 번 출력을 원한다. 12.
이 출력을 얻는 방법 !!
이 좀 더 컴팩트 한 형태로 작성하지만, 단지 명확성을 위해 할 수 있습니다 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
다음 질문에 대한 설명에 대한 설명을 –
으로 업데이트했습니다. row_number 함수에서 데이터를 분할하고 숫자가 1 인 행을 필터링 할 수 있습니다. 더 효율적이어야합니다 : ( select num, row_number()와 같은 숫자와 같은 것 id id by id)를 src에서 n으로 사용합니다. ) 숫자에서 id를 선택하십시오. 여기서 n <> 1'은 내 테스트에서 더 나은 실행 계획을 렌더링합니다. – jpw
@jpw 좋은 생각! 나는 확실히 그것을 upvote 것입니다. ;-) –
당신이 지금까지 시도한 것은 무엇입니까? – Sankar
출력에 중복 값이 포함될 수 있습니까? 그렇다면 규칙은 무엇입니까? –
입력에 3 번 1, 2 번 2 번, 3 번 3 번, 2 번 4. 출력 2 번 1 번, 1 번 2 번, 2 번 3 번, 1 번 4 번 .. –