database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 6433 게시물 읽기
No. 6433
mssql 의 동적 쿼리 검색인데 도와 주세요~
작성자
김기철
작성일
2012-10-31 11:43
조회수
8,430

MSSQL을 이용한 동적 쿼리입니다. 아래 소스와 같은 상황입니다.

처음 검색을 하면 a_viewyn의 값을 잘 출력을 하는데요.

 

동적 쿼리를 이용해서 원하는 값만 추출을 하고 싶은 경우에는 열 이름이 없다고 나오네요.

아무래도 별칭이라서 조건문 where 에 안 먹히는 것 같은데

이거 해결 하는 법 없나요?

 

가정에 무궁한 발전이 있기를 바랍니다.

 아래는 jsp 앞단 선택 소스 입니다.

체크 박스를 선택 했을때 값이 넘어가게 됩니다.

<th >전시여부</th>
      <td>&nbsp;
       <form:checkbox path="psviewyn" label="전체" value="" class="noborder" />
       <form:checkbox path="psviewyn" label="전시" value="Y" class="noborder" />&nbsp;
       <form:checkbox path="psviewyn" label="미전시" value="N" class="noborder" />  

 </td>

 아래는 ibatis 넘어온 값으로 동적쿼리가 실행 되는 곳 입니다.

<select id="selectBannerList" parameterClass="mallBanner" resultClass="mallBanner" remapResults="true">
  
 SELECT
 a.bannerseq                       AS bannerseq
  ,a.lgrp                           AS lgrp
  ,dbo.fn_codenm(a.banlocation)     AS banlocation
  ,a.bantitle                       AS bantitle
   ,a.sort                          AS sort
  ,a.reguserid                      AS reguserid
  ,a.regdate                        AS regdate
  ,a.startdate                    AS startdate
  ,a.enddate                      AS enddate
  ,a.moduserid                      AS moduserid
  ,a.moddate                        AS moddate
  ,a.confyn        AS confyn
  ,       CASE WHEN b.sort = '10000552' THEN 'Y'
                             WHEN b.sort = '10000553' THEN 'Y'
                             WHEN b.sort = '10000554' THEN 'Y'
                             WHEN b.sort = '10000555' THEN 'Y'
                             WHEN b.sort = '10000556' THEN 'Y'
                 ELSE 'N'
                 END AS 'a_viewyn'
  ,a.muserid       AS muserid
  ,a.mallconfdate     AS mallconfdate
  ,     CASE WHEN b.sort = '10000552' THEN '메인배너'
                             WHEN b.sort = '10000553' THEN '상단좌측'
                             WHEN b.sort = '10000554' THEN '상단우측'
                             WHEN b.sort = '10000555' THEN '하단좌측'
                             WHEN b.sort = '10000556' THEN '하단우측'
                 ELSE ''
                 END AS 'a_sort'
   FROM dbo.T_MALL_BANNER_INFO a
           left outer join dbo.T_MALL_BP_MAIN_INFO b
       on a.muserid = b.muserid and a.bannerseq =b.bannerseq
  WHERE 1=1
  <isEqual property="temp" compareValue="10000011">
   AND  a.muserid = #muserid#
  </isEqual>


  <isNotEmpty prepend="AND" property="psviewyn">
      CHARINDEX(#psviewyn#, a_viewyn)<![CDATA[>]]>0
    </isNotEmpty>


     <isNotEmpty prepend="AND" property="psconfyn">
      CHARINDEX(#psconfyn#, a.confyn)<![CDATA[>]]>0
     </isNotEmpty>
     <include refid="support.sql.map.listPagingTail"/>
 </select>

 

이 글에 대한 댓글이 총 1건 있습니다.

ibatis를 쓴다고 꼭 "어렵게" 동적 쿼리를 하실 필요는 없습니다.

 

"저는 ibatis가 뭔지 잘 모릅니다."를 감안하고 아래 설명을 봐주세요.

특히  작은 따옴표 없는 a.viewyn = #psviewyn# 이런 형태가 맞는지 작은 따옴표 있는 a.viewyn = '#psviewyn#' 이런 형태가 맞는지는 전혀(!) 모르겠습니다. *^_^*

 

web에서 psviewyn으로 받은 값을 기준으로
dbo.T_MALL_BANNER_INFO 테이블에 viewyn 컬럼이 일치하는 것을 찾는다면 where 절에 다음과 같이 추가합니다.
 
   AND ( a.viewyn = #psviewyn# OR '' = #psviewyn# )
 
이렇게 하시면 OR로 a.viewyn = #psviewyn#'' = #psviewyn#이 연결되어 있으므로 
 
(1) 전체를 선택한 경우
'' = #psviewyn#
이 부분이 참이 되어 a.viewyn의 값이 무엇이든지에 상관없게 되어 원하시는 대로 처리가 될 겁니다.
(2) Y혹은 N을 선택한 경우
'' = #psviewyn#
이 부분은 거짓이 되어 
a.viewyn = #psviewyn#
이 부분이 참인지 거짓인지에 따라 조회 결과에 나올지 그렇지 않을지가 결정되게 되어 역시 원하시는 대로 처리가 될 겁니다.
 
 
그럼 쉽게 해결되지 않을까 싶습니다. *^_^*

우욱님이 2012-10-31 22:51에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
6436쿼리 도움 좀 주세요;; [2]
초보자
2012-11-06
7083
6435sql2005 update 사용중 이상한점 문의 드립니다. [1]
궁금
2012-11-01
7247
6434login , logout trigger [2]
노진광
2012-11-01
6868
6433mssql 의 동적 쿼리 검색인데 도와 주세요~ [1]
김기철
2012-10-31
8430
6432테이블 합쳐서 조회하기 [1]
초보
2012-10-31
7010
6431컬럼변조에서 인덱스 문제 [4]
조중규
2012-10-29
6537
6429FETCH 내에서 TRANACTION을 사용하면? [1]
하광희
2012-10-28
7211
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다