2014-04-25 2 views
0

나는 더미 데이터가 하나있는 SQL Table이 있습니다. 내가 내가 N이 더미 데이터 및 업데이트가 column type그룹 3에없는 것을 찾으려면 sql 쿼리

my table tbl 

ID D1 M1 C1 QTY TYPE 

1 D1 M1 C1 1 Y 
2 D1 M2 C1 2 Y 
3 D1 M3 C1 3 Y 
4 D1 M1 C1 1 Y 

5 D2 M1 C1 1 Y 
6 D2 M2 C1 2 Y 
7 D2 M3 C2 3 Y 
8 D2 M1 C1 1 Y 
9 D2 M2 C1 2 Y 

10 D3 M1 C1 1 Y 
11 D3 M2 C1 2 Y 
12 D3 M3 C1 3 Y 
13 D3 M1 C1 1 Y 
14 D3 M2 C1 2 Y 
15 D3 M3 C1 3 Y 
16 D3 M1 C2 1 Y 

이 열 D1M1

그룹화와 행이 있음을 원하는 없음. 레코드가있는 경우 3 레코드 그룹을 식별해야하며 레코드가 남아 있으면 "아니오"로 설정해야합니다. 그렇지 않으면 "예" 예 :

조건 1 : 레코드가 4 개인 경우 그룹을 만듭니다 3 ~ 3 개의 레코드가 있으므로 마지막 1 개의 레코드는 "아니오"로 설정해야합니다.

조건 2 : 나는 5 개 레코드가있는 경우에, 3-3의 그룹이 때문에 지난 2 개 기록을 유지 기록하기는 조건 3

"아니오"로 설정됩니다 : 나는 7 개 기록이있는 경우, 다음을 3-3의 그룹은 그래서 지난 1 개 기록은 "없음"

내 예상 답변

ID D1 M1 C1 QTY TYPE 

1 D1 M1 C1 1 YES 
2 D1 M2 C1 2 YES 
3 D1 M3 C1 3 YES 
4 D1 M1 C1 1 NO 

5 D2 M1 C1 1 YES 
6 D2 M2 C1 2 YES 
7 D2 M3 C2 3 YES 
8 D2 M1 C1 1 NO 
9 D2 M2 C1 2 NO 

10 D3 M1 C1 1 YES 
11 D3 M2 C1 2 YES 
12 D3 M3 C1 3 YES 
13 D3 M1 C1 1 YES 
14 D3 M2 C1 2 YES 
15 D3 M3 C1 3 YES 
16 D3 M1 C2 1 NO 

SQLFIDDLE

알려주십시오 m 아래로 없다로 설정됩니다 남아있는 기록 전자 솔루션.

답변

2

이게 당신이 찾고 있는게 있나요?

with toupdate as (
     select t.*, row_number() over (partition by d1 order by id) as seqnum, 
      count(*) over (partition by d1) as cnt 
     from tbl t 
    ) 
update toupdate 
    set type = (case when seqnum <= 3*(cnt /3) then 'yes' else 'no' end); 
당신은 또한 select와 유사한 논리를 실행할 수 있습니다

:

select t.*, (case when seqnum <= 3*(cnt /3) then 'yes' else 'no' end) 
from (
     select t.*, row_number() over (partition by d1 order by id) as seqnum, 
      count(*) over (partition by d1) as cnt 
     from tbl t 
    ) t;