안녕하세요! MSSQL과 C#으로 제조업체 현장 및 관리화면 개발하는 신입개발자 입니다! 

밑에와 같은 사진처럼 테이블 조회를 해야하는데요 (실제 테이블 구조와 동일하게 만들었습니다)

캡처.PNG

 

[질문 배경]

기존 테이블 같은 경우에는 단순 조회로 

SELCT ~ FROM WHERE 문으로 JOIN해서 실행하였습니다. 

 

변경결과테이블을 위해 제가 생각한 방법은 총 두가지였는데요 

1. 동적 PIVOT 

2. 동적 CURSOR 

 

동적으로 쿼리를 생성하는 이유는

1. 학번에 따라 조회될 학생이 다름

2. 학생별 입시 항목 개수별로 COLUMN이 생성되어야함 

입니다. 

 

[쿼리 질문]

1. 동적 PIVOT 

기존에 열로 가지고 있던 컬럼을 행으로 바꾸기위해 사용했지만 피벗대상컬럼안에 들어갈 컬럼이 4개가 들어가야하므로 

방법을 몰라서 하다가 멈췄습니다. 

 

2. 동적 CUSOR 

입시항목 개수별로 COLUMN이 생성되어야 하므로 

조회되어야 할 [입시방법, 원서접수,원서비,결과]컬럼을 SET해주었습니다.

 

DECLARE @QUERY            varchar(MAX)  = 'SELECT '

SET @QUERY = @QUERY + '학번= ' + '''' + @학번+ ''''

DECLARE CUR CURSOR FOR

SELECT 학생이름

        ,입학일자

        ,졸업일자

       , 평균성적

       , 출석일

       , 담임이름

       , 입시항목

       , 입시방법

       , 원서접수

       , 원서비

       , 결과

FROM 학생테이블 

JOIN  대학테이블 

WHERE 입학일자 >= '2015-01-01'

 

OPEN CUR
FETCH NEXT FROM CUR INTO @학생이름, @입학일자, @졸업일자, @평균성적, @출석일, @담임이름, @입시항목,@입시방법, @원서접수, @원서비, @결과 

 

WHILE @@FETCH_STATUS = 0

BEGIN

SET @QUERY = @QUERY + ', ' + @학번 + '_학생이름 = ' + '''' + ISNULL(@학생이름, '') + ''''

SET @QUERY = @QUERY + ', ' + @학번 + '_입학일자 = ' + '''' + ISNULL(@입학일자, '') + ''''

SET @QUERY = @QUERY + ', ' + @학번 + '_졸업일자 = ' + '''' + ISNULL(@졸업일자, '') + ''''

SET @QUERY = @QUERY + ', ' + @학번 + '_평균성적 = ' + '''' + ISNULL(@평균성적, '') + ''''

SET @QUERY = @QUERY + ', ' + @학번 + '_출석일 = ' + '''' + ISNULL(@출석일, '') + ''''

SET @QUERY = @QUERY + ', ' + @학번 + '_담임이름 = ' + '''' + ISNULL(@담임이름, '') + ''''

SET @QUERY = @QUERY + ', ' + @학번 + '_입시항목 = ' + '''' + ISNULL(@입시항목, '') + ''''

SET @QUERY = @QUERY + ', ' + @학번 + '_입시방법 = ' + '''' + ISNULL(@입시방법, '') + ''''

SET @QUERY = @QUERY + ', ' + @학번 + '_원서접수 = ' + '''' + ISNULL(@원서접수, '') + ''''

SET @QUERY = @QUERY + ', ' + @학번 + '_원서비 = ' + '''' + ISNULL(@원서비, '') + ''''

SET @QUERY = @QUERY + ', ' + @학번 + '_결과 = ' + '''' + ISNULL(@결과, '') + ''''

 

FETCH NEXT FROM CUR INTO @학생이름, @입학일자, @졸업일자, @평균성적, @출석일, @담임이름, @입시항목,@입시방법, @원서접수, @원서비, @결과 

 

END

 

CLOSE CUR

DEALLOCATE CUR

 

SELECT @QUERY

 

EXEC(@QUERY)

 

이렇게 했을 때에 VARCHAR(MAX)용량이 초과되어 조회되지 않습니다 ㅜㅜ

CURSOR가 필요한 컬럼은 정작 [입시항목, 입시방법, 원서접수, 원서비, 결과]뿐이고 

이 컬럼들만 CURSOR로 조회할 시 데이터가 잘 받아집니다. 

 

하지만 [학생이름, 입학일자, 졸업일자, 평균성적, 출석일, 담임이름]의 데이터조회는 되지 않고 

쿼리를 모드로 나눠서 파라미터로 view단에 받아오니 동일한 controlview를 사용하기 때문에 

코드상에서 쿼리를 담은 table하나는 묻히게 되어 결과가 제대로 나오지 않는 상황입니다.. 

 

정적쿼리로 무식하게 때려 박을 수 있지만 언제든 입시항목은 늘어날 수 있는 상황이기 때문에 그때 그때마다 

쿼리를 수정하기 어렵다고 판단되어 동적 쿼리를 고집하고 있는 상황입니다. 

 

분명히 방법이 있을 것 같은데 도저히 모르겠어서 2주동안 구글링하고 찾아봐도 못찾겠어서 커뮤니티에 질문올립니다!! 

1. CURSOR를 돌리면서 SELECT문을 따로 함께 사용할 수 있는 방법이 있을까요?2. 

2. 아니면 PIVOT으로 해결할 수 있는 방법이 있을까요?

3. 그도 아니면 다른 방법이 있으시면 꼭좀 알려주시기를 부탁드리겠습니다 !! 

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 3058
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 1940
10788 sql 쿼리 바인드변수관련 문의드립니다. [2] jkrh**** 2022.03.07 106
10787 간단한 sql 쿼리문 질의 [1] file 재희 2022.03.07 165
10786 MS SQL 에서 geojson 파일 IMPORT [1] 거울자아1759 2022.03.05 144
» 동적pivot, cursor쿼리에서 조회 실패한 프로시저 쿼리 질문드립니다. (도움 부탁드립니다ㅠㅠ) [1] file 박효진4534 2022.03.04 200
10784 특정테이블이 특정 날짜 기준으로 검색속도가 너무 느립니다. [2] D-hydrogen 2022.03.03 158
10783 테이블 설계 시 성능 이슈 [4] 구경하는초보 2022.02.21 341
10782 MSSQL 축소오류 [3] HSQL 2022.02.19 431
10781 형태소검색이라 해야 하나요? [1] 카루카루 2022.02.11 151
10780 쿼리문 아래 [1] 아싸라비아콜롬비아 2022.02.04 118
10779 VARCHAR(CHAR) -> NVARCHAR(NCHAR) 전환에 따른 문의 사항 [2] 지니~~ 2022.01.28 186
10778 MSSQL DB 백업 및 복원 에러 문의 file 김민주5506 2022.01.18 159
10777 MSSQL 대량 insert 시에 디자인뷰 사용이 안되는게 일반적인건가요? [1] 박무적 2022.01.11 146
10776 SSMS에서 "null" 값 붙이기 안되게 하는 방법이 없나요 ? [2] 김병훈_279586 2022.01.08 210
10775 MSSQL 저장프로시저 디버깅 방법 [1] SJJ 2022.01.07 374
10774 열 검색하기? 질문입니다 [1] moredumb 2022.01.07 93
10773 몽고DB 간 통신 관련해서 궁금합니다. [1] YGDev 2022.01.07 103
10772 MSSQL Database Hide ? 기능 [1] file 서울사뢈 2022.01.06 230
10771 안녕하세요. Linked Server 관련 질문입니다. [1] 문국대 2021.12.29 99
10770 MSSQL 프로시져 파라미터 조건 처리 방법 [1] 다초 2021.12.28 349
10769 문의:update시 다른 필드의 변경을 체크해서 값변경시 문제가 없는지 Lovely00 2021.12.25 92





XE Login