대답 ID가 A, B, C 등으로 가정하고 모든 user_id에 모두 해당한다고 가정 할 경우 조건부로 에있는 분석 함수 lag()
을 사용하여 해결할 수 있습니다. 일반적으로 answer_value
은 null 일 수 있으며 A
답변이 null이지만 실제로 B
답변에 값이있는 경우 B
답변이 지워집니다 (null로 대체 됨). 설명 할 테스트 데이터를 추가했습니다. 또한 모든 사용자는 각 질문마다 행이 하나만 있다고 가정합니다 (question_id, user_id
은 테이블에서 고유합니다).
with
db_table (question_id, user_id, answer_value) as (
select 'A', 'JIM' , 1 from dual union all
select 'B', 'JIM', 2 from dual union all
select 'C', 'JIM', 4 from dual union all
select 'A', 'PAUL', 3 from dual union all
select 'B', 'PAUL', 1 from dual union all
select 'C', 'PAUL', 3 from dual union all
select 'A', 'MIKE', 2 from dual union all
select 'B', 'MIKE', 1 from dual union all
select 'C', 'MIKE', 4 from dual union all
select 'A', 'ANN' , null from dual union all
select 'B', 'ANN' , 2 from dual union all
select 'C', 'ANN' , 4 from dual
)
-- end of test data; SQL query begins below this line
select question_id, user_id,
case when question_id = 'B'
then lag(answer_value) over (partition by user_id order by question_id)
else answer_value end as answer_value
from db_table
;
출력는 :
QUESTION_ID USER_ID ANSWER_VALUE
----------- ------- ------------
A ANN
B ANN
C ANN 4
A JIM 1
B JIM 1
C JIM 4
A MIKE 2
B MIKE 2
C MIKE 4
A PAUL 3
B PAUL 3
C PAUL 3
12 rows selected.
그래서 user_id에 대한 모든 question_id가 해당 사용자의 question_id A 응답으로 대체 되었습니까? –
이미지를 참조하십시오. 질문 B의 ANSWER_VALUE를 질문 A의 ANSWER_VALUE로 설정하고 각 사용자마다 개별적으로 설정하겠습니다. 두 번째 이미지의 강조 표시된 빨간색 값은 변경하려는 값입니다. – Inglonias
나는 또한 당신의 코멘트를 다시 읽고 그것을 잘못 해석했다는 것을 깨달았다. 나는 네가 옳다고 생각한다. (이 때문에 컴퓨터 대신 사람에게 묻는 이유와 그림을 사용하는 이유가 있습니다. 내가 원하는 것을 정확하게 말로 표현하는 것이 어렵습니다.) – Inglonias