참바다
10
2018-08-10 18:13:40
3
246

쿼리 질문입니다.(반복문)


이런 경우 어떻게 해야할지 감이 안 잡혀서 조언 구합니다.


1. SELECT NO_ID FROM GRP_MAP

-> 이 문장을 실행해서 얻은 NO_ID를 


2.

SELECT S1.*

  FROM (SELECT ROW_NUMBER ()  OVER (PARTITION BY T1.IDX ORDER BY T1.IDX) AS RNUM,

               T1.*

          FROM (SELECT S.IDX,   S.NM,                      

                   

 --여기서부터 반복시작, 받아온 NO_ID의 개수만큼 CASE~WHEN 문장을 늘려야합니다. 따옴표 안에 들어있는 'NO0001'은 받아온 NO_ID가 차례로 들어갑니다.

                       CASE WHEN T.NO_ID = 'NO0001' THEN '1' ELSE '0' END AS 'NO0001',

                       CASE WHEN T.NO_ID = 'NO0002' THEN '1' ELSE '0' END AS 'NO0002',

                       CASE WHEN T.NO_ID = 'NO0003' THEN '1' ELSE '0' END AS 'NO0003',

                       CASE WHEN T.NO_ID = 'NO0004' THEN '1' ELSE '0' END AS 'NO0004',

                       CASE WHEN T.NO_ID = 'NO0005' THEN '1' ELSE '0' END AS 'NO0005',

                                    .

                                    .

                                    .

                                    .

                  FROM FILE_DETAIL S JOIN GRP_MAP T ON S.IDX = T.IDX) T1) S1

 WHERE S1.RNUM = 1


그냥 콘트롤러에 preparedstatement 사용해서 문장 만들어봤는데, 생각보다 쉽지 않네요ㅠㅠ 

프로시져 만드는 것도 봤는데, 그것도 아닌 것 같구요... 똑같은 문제 가지고 늘어지니까 이젠 그 어떤 감도 잡히지 않습니다ㅠㅠ 제가 아직 초보개발자라 견문이 부족해서 이쪽에 여쭙습니다. 답변 꼭 부탁드릴게요!

0
0
  • 답변 3

  • 돌갤여신나나미
    492
    2018-08-10 22:28:54

    for돌리려면 프로시져 쓰시거나 자바서버단에서 돌린후 던져줘야되요

    0
  • 바카디F
    1k
    2018-08-11 20:54:11 작성 2018-08-11 20:54:50 수정됨

    질문이 뭔지 애매하네요. 


           CASE WHEN T.NO_ID = 'NO0001' THEN '1' ELSE '0' END AS 'NO0001',

                           CASE WHEN T.NO_ID = 'NO0002' THEN '1' ELSE '0' END AS 'NO0002',

                           CASE WHEN T.NO_ID = 'NO0003' THEN '1' ELSE '0' END AS 'NO0003',

                           CASE WHEN T.NO_ID = 'NO0004' THEN '1' ELSE '0' END AS 'NO0004',

                           CASE WHEN T.NO_ID = 'NO0005' THEN '1' ELSE '0' END AS 'NO0005',

                                        .

                                        .

                                        .

                                        .

    Switch(Q)

    1 : 이 부분이 가변적이기 때문에 할 수 없다? 라는것인가요?

    가변컬럼 구조 자체가 잘 못 된것이라 볼 수 있습니다. 

    컬럼하나에 구분자를 포함한 가변값을 넣어 리턴하고, 응용단에서 구분해주세요.

    group by  S.IDX,   S.NM  기준으로 listagg 를 사용하거나 기타등등


    2: 그 부분은 고정인데 , 하고 나니 한개의 ROW에 안들어가서 그런가요? 

    GROUP BY S.IDX,   S.NM 하고 case 부분은 MAX 함수로 합쳐주세요. 

    0
  • javavoa
    104
    2018-08-11 23:56:01

    답이 되실진 모르겠지만 mybatis에서 foreach Tag가 있습니다.!

    검색하셔서 사용하시면 될꺼같아요


    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.