안녕하세요. 공부중인 취준생입니다. 공부하다 도저히 알 곳이 없어 여기에 질문하게 되었습니다.

아래 쿼리는 반, 번호, 점수 테이블이라고 보시면 되는데요

A반의 1번과 2번 3번이 같은 점수인 경우 1번에만 점수를 입력하고 2,3번에는 NULL값으로 놔둔 테이블입니다.

즉 A의 2,3은 50점 A의 5는 70점 이런식입니다.

 

문제1번의 쿼리는 이해를 했는데(사실 로직은 잘 이해가 안됩니다.)

문제2번의 쿼리는 이해가 안되더라구요.

NULL값이 모두 채워진 테이블에서 seq가 작은 값을 찾아서 NULL로 바꿔준다는 것이 이해가 되지 않습니다.

제가 기본적인 로직이 실행이 어떤식으로 되는지 잘 이해가 되지 않는데 혹시 가능하시다면 문제 2번을 디버깅하듯이 순서대로 설명해주실 수 있는 분이 계시다면 감사하겠습니다.

 


DROP TABLE IF EXISTS OmitTbl;
CREATE TABLE OmitTbl
(keycol CHAR(8) NOT NULL,
 seq    INTEGER NOT NULL,
 val    INTEGER ,
  CONSTRAINT pk_OmitTbl PRIMARY KEY (keycol, seq));

INSERT INTO OmitTbl VALUES ('A', 1, 50);
INSERT INTO OmitTbl VALUES ('A', 2, NULL);
INSERT INTO OmitTbl VALUES ('A', 3, NULL);
INSERT INTO OmitTbl VALUES ('A', 4, 70);
INSERT INTO OmitTbl VALUES ('A', 5, NULL);
INSERT INTO OmitTbl VALUES ('A', 6, 900);
INSERT INTO OmitTbl VALUES ('B', 1, 10);
INSERT INTO OmitTbl VALUES ('B', 2, 20);
INSERT INTO OmitTbl VALUES ('B', 3, NULL);
INSERT INTO OmitTbl VALUES ('B', 4, 3);
INSERT INTO OmitTbl VALUES ('B', 5, NULL);
INSERT INTO OmitTbl VALUES ('B', 6, NULL);

 

문제 1 NULL 값을 해당 값으로 채워주기
UPDATE OmitTbl
    SET val = (SELECT T1.val
               FROM OmitTBl T1
               WHERE OmitTBl.keycol = T1.keycol
               AND T1.seq = (SELECT MAX(seq)
                                  FROM OmitTbl T2 
                                  WHERE OmitTbl.keycol = T2.keycol 
                                  AND OmitTbl.seq > T2.seq
                                  AND T2.val IS NOT NULL))
WHERE val is NULL;

 

문제 2 (val이 중복인 값은  다시 NULL값으로 변경)

UPDATE OmitTbl
SET val = CASE WHEN val = (SELECT T1.val
          FROM OmitTbl T1
          WHERE T1.keycol = OmitTbl.keycol 
          AND T1.seq = (SELECT MAX(seq)
                             FROM OmitTbl T2
                             WHERE T2.keycol = OmitTbl.keycol
                             AND OmitTbl.seq > T2.seq
                             AND OmitTbl.val = T2.val))
        THEN NULL
        ELSE val END;
 

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 36178
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 18694
10903 종료일자 품목 안보이게 하기 [1] 슈토파이터 2023.03.29 160
» 안녕하세요 SQL 실행순서에 대해 질문이 있습니다. [3] 이진우5935 2023.03.28 215
10901 pivot 질문드립니다. [6] file Just 2023.03.21 228
10900 프로시저안에서 다른 프로시저를 호출하여 다중테이블 결과값 받아서 처리하는 방법이 있나요? [4] AceCarrot 2023.03.15 198
10899 SQLD, ROLL UP 함수 문제 관련, 답변 주실 수 있는 분 계실까요? [2] file 2124 2023.03.06 284
10898 Update는 성공했는데 웹서버가 열리지 않습니다 [5] 잼백 2023.03.01 217
10897 MariaDB로 피벗 구현하는데 쿼리 실행 시간이 너무 오래걸립니다... [2] file ProjectUnknown 2023.02.24 227
10896 win xp에서 win11 22h2(sql2008r2 express) DB서버 접속 실패 문의드립니다. Cover Fly 2023.02.24 254
10895 문자열 잘라서 join 하여 조회 기능 문의 [1] 문성원 2023.02.18 205
10894 SQL Server 구성관리자에서 네트워크 별칭 입력 시 속성창이 읽기전용이 됩니다. [1] 젝카로델피 2023.02.17 204
10893 사용자별 데이터 조회 [5] 냥냥 2023.02.16 161
10892 저장프로시저 where 조건절 질문 [1] m**** 2023.02.03 165
10891 mssql 조건절 성능에 대한 질문입니다. [2] rwo 2023.02.03 184
10890 확장저장 프로시저용 dll 파일을 사용중인데 전자서명 에러가 발생하네요 [2] ksk**** 2023.02.01 133
10889 mssql pivot 질문입니다. [1] rwo 2023.01.27 210
10888 주문번호합계중량에 따른 포장 사이즈 계산 [1] phh**** 2023.01.18 251
10887 SSAS 처리 진행시 SQL 쿼리 DISTINCT 관련 [1] 밤식 2023.01.17 181
10886 MSSQL 입문 강의 사이트나 책 추천해주실 수 있을까요? [2] 그냥토끼 2023.01.10 1006
10885 From 절 테이블 변수 [1] m**** 2022.12.29 338
10884 ms-sql 프로시저에서 입력 파라미터와 해당하는 값 얻기 [1] m**** 2022.12.28 138





XE Login