반복문 변수 선언 0 4 919

by 스캇 [SQLServer] [2020.03.04 19:31:10]


캡처.JPG (369,035Bytes)

 

SELECT F1,F2,F3,F4,F5,F6, F7 ~~~~~~~ F255 FROM PLM 이렇게 되어 있습니다.

제가 원하는값은 

SELECT F1,F2,F3,F4,F5 FROM PLM

UNION ALL 

SELECT F1,F2,F3,F4,F6 FROM PLM

UNION ALL 

SELECT F1,F2,F3,F4,F7 FROM PLM

UNION ALL 

SELECT F1,F2,F3,F4,F8 FROM PLM

UNION ALL 

SELECT F1,F2,F3,F4,F9  FROM PLM

이렇게 원하는데 몇백개를 UNION  하기 그래서 반복문을 만들었는데.. 빨간색 부분이 F5, F6 필드명으로 SELECT 되지 않고 문자로 들어갑니다. 

SELECT F1,F2,F3,F4,'F6' FROM PLM

SELECT F1,F2,F3,F4,'F7' FROM PLM 가 아닌 

 

SELECT F1,F2,F3,F4,F6 FROM PLM 조회 하려면 어떻게 수정 해야 될까요? 

---------


DECLARE @COUNT INT, @I INT
SET @COUNT = 1
SET @I = 5

WHILE @COUNT <= (SELECT COUNT(*) FROM PLM WHERE F1 = 'GENERAL CLASS')


BEGIN
   INSERT INTO #TEMP_PLM 
   SELECT F1,F2,F4,CONCAT('F', @I) AS F5 FROM PLM WHERE F1 = 'GENERAL CLASS' ORDER BY 1 OFFSET @COUNT ROWS FETCH NEXT 1 ROWS ONLY

      SET @COUNT = @COUNT +1
      SET @I = @I +1

END
 

by 마농 [2020.03.05 08:11:34]

이전 질문에 UNPIVOT 구문 알려드렸는데 그거 쓰시죠. 왜?
그런데, 작성하신 로직이 좀 이상하네요?
혹시? 데이터 구조가 1행에 1개 컬럼 값만 있는 구조인가요?
1, null, null, null, ...
null, 2, null, null, ...
null, null, 3, null, ...
그게 아니라면? 로직을 잘못 구현한게 아닌가 싶은데요?


by 스캇 [2020.03.05 10:24:43]

네 UNPIVOT  가르켜 주신것으로 되었습니다. 감사합니다.

근데 반복문으로 구현 하고 싶어서 재 문의 드립니다.  이미지 재 첨부 했습니다.

F1,F2,F3,F4,F5  (100건) 이렇게 해서 저장 하고 다시 F1,F2,F3,F4,F6  (100건),F1,F2,F3,F4,F6  (100건) ~~~~~~~ 이렇게 TEMP 테이블 저장해서 조회 하고 싶습니다.

F5 ~ F255 입니다. 단 NULL 값은 저장하지 않고요. 추후에는 F255 더 늘어 날수 있습니다.


by 마농 [2020.03.05 15:23:11]

1. 변수는 값을 처리할 때 쓰고요.
- 명칭이나 쿼리문장 일부를 대체할 수는 없습니다.
- 동적쿼리를 이용하세요. EXEC sp_executesql @sql
2. 그리고 로직이 완전 틀렸습니다.
- count 를 이용한 offset 로직은 전혀 맞지 않는 엉뚱한 로직이네요.
- 로직 검토 다시 해보세요.


by 스캇 [2020.03.05 15:34:09]

네 알겠습니다. 동적쿼리 찾아 보겠습니다.

감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입