안녕하세요! 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 33870
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 17081
10803 mysql 질문입니다. [2] 서승권 2022.04.25 195
10802 sql 처리방식 문의 [2] 깨비꼬비 2022.04.22 113
10801 MSSQL INSERT 질문드려요 [1] file 1108321 2022.04.09 170
10800 BETWEEN 구문에 MIN AND MAX [1] jkrh**** 2022.04.04 151
10799 쿼리문 타임아웃 관련 질문 있습니다. [4] BHLee 2022.03.31 790
10798 데이타베이스 복원 관련 문의 입니다. [1] 김영삼1053 2022.03.29 190
10797 MSSQL DB백업 문의 (유지관리계획) [1] 이루스 2022.03.28 165
10796 sql 문의 hch**** 2022.03.27 88
10795 sql 문의 hch**** 2022.03.27 60
10794 sql 문의 [1] hch**** 2022.03.27 90
10793 여러개의 쿼리에 대한 commandtimeout에 관련해서 질문드립니다. [2] BHLee 2022.03.23 107
10792 MSSQL 수식 포함 수식이 여러건일 때 [1] Min2817 2022.03.22 163
10791 대량의 데이터 의 sum 을 좀 빠르게 구현 할 수 있는 방법을 모르겠습니다. [4] 비상2834 2022.03.20 1096
10790 xml 데이터를 테이블 형식으로 변환 [2] 무념 2022.03.16 127
10789 포인트 차감 로직 [2] 홍은혜 2022.03.07 483
10788 sql 쿼리 바인드변수관련 문의드립니다. [2] jkrh**** 2022.03.07 132
10787 간단한 sql 쿼리문 질의 [1] file 재희 2022.03.07 181
10786 MS SQL 에서 geojson 파일 IMPORT [1] 거울자아1759 2022.03.05 178
» 동적pivot, cursor쿼리에서 조회 실패한 프로시저 쿼리 질문드립니다. (도움 부탁드립니다ㅠㅠ) [1] file 박효진4534 2022.03.04 233
10784 특정테이블이 특정 날짜 기준으로 검색속도가 너무 느립니다. [2] D-hydrogen 2022.03.03 183





XE Login