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 4423 게시물 읽기
No. 4423
쿼리구문 좀 봐주세여..^^
작성자
황병득(hbdms)
작성일
2008-08-28 15:24
조회수
5,676

함수를 하나 만들고 있는데, 데이터값이 안 나오내용..^^

2008-08-23 00:00:00 ~ 2008-08-23 23:59:59인 데이터중에서 조건에 해당하는데 데이타중에서, 각 case마다 TOP 1 인  ONCENTLEV_ENTIMAGE의 필드의 값을 얻어와서 임시

테이블에 넣고 임시테이블를 리턴받 싶은데용 결과값을 보면다음과 같습니다. 

 MainOncEntIImage || BackOncEntImage || HakYOncEntImage ||  DormOncEntImage

     NULL                  ||    XXXXX                 ||  NULL                    ||   NULL

NULL이 나와서 데이터를  확인해 본결과 데이터값은 분명히 존재 헙니다..^^ 그러담 case when 구문이 틀렸다는

건데 제가 case when를 첨 써는 것이라 잘 모르갰습니다. 아시는 분은 답변 좀 부탁드립니다.

 

 

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO


ALTER  FUNCTION [dbo].[fn_test1]

      @From varchar(50),     //시간   '2008-08-23 00:00:00'
      @To varchar(50)         //시간이 단긴 문자열 '2008-08-23  23:59:59'
)
RETURNS @TempCalcTbl TABLE
(
 MainOncEntIImage varchar(50),
 BackOncEntImage varchar(50),
 HakYOncEntImage varchar(50),
 DormOncEntImage varchar(50)
 }
AS
BEGIN
 DECLARE @MainOncEntGateImage varchar(50)
 DECLARE  @BackOncEntGateImage varchar(50)
 DECLARE @HakYOncEntGateImage varchar(50)
 DECLARE @DormOncEntGateImage varchar(50)
  
SELECT TOP 1
   @MainOncEntGateImage = CASE WHEN ONCENTLEV_ENTIMAGE IS NOT NULL AND
            ONCENTLEV_ENTGATE = 'MainOncEntGate' 
           AND ONCENTLEV_ENTIMAGE <> ''
           THEN ONCENTLEV_ENTIMAGE END,
   
   
     @BackOncEntGateImage =  case when ONCENTLEV_ENTIMAGE IS NOT NULL AND
            ONCENTLEV_ENTGATE = 'BackOncEntGate' AND
            ONCENTLEV_ENTIMAGE <> '' THEN ONCENTLEV_ENTIMAGE END,
 

    @HakYOncEntGateImage = case when ONCENTLEV_ENTIMAGE IS NOT NULL AND
           ONCENTLEV_ENTGATE = 'HakYOncEntGate' AND
              ONCENTLEV_ENTIMAGE <> '' THEN ONCENTLEV_ENTIMAGE END,

    @DormOncEntGateImage = case when ONCENTLEV_ENTIMAGE IS NOT NULL AND
             ONCENTLEV_ENTGATE = 'DormOncEntGate' AND
             ONCENTLEV_ENTIMAGE  <> '' THEN ONCENTLEV_ENTIMAGE END

          FROM ONCENTLEV
 WHERE ONCENTLEV_ENTDATE BETWEEN @From AND @To      
  ORDER BY ONCENTLEV_ENTDATE DESC

  

 

  
  INSERT  @TempCalcTbl  VALUES( @MainOncEntGateImage,@BackOncEntGateImage, @HakYOncEntGateImage, @DormOncEntGateImage);
   
 RETURN
END
Go

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

음 조건과 일치하지않았을때의 값은 지정하지않으셧으니 그런거 아닌가염

 case when 조건 then 참값 else 거짓값 end

그리고
쿼리를 보면 top 1로 잡고 
각각 다른값을 호출했는데 

ONCENTLEV_ENTGATE = 'BackOncEntGate'
ONCENTLEV_ENTGATE = 'BackOncEntGate' 
ONCENTLEV_ENTGATE = 'HakYOncEntGate'
ONCENTLEV_ENTGATE = 'DormOncEntGate'

조건에 맞는건 하나뿐일거 같은데염, 그래서 BackOncEntImage 값에 맞아 그값만 들어간거같습니다.

즉, 위에 셀렉트한 쿼리가

SELECT TOP 1 ONCENTLEV_ENTIMAGE
FROM ONCENTLEV
WHERE  
ONCENTLEV_ENTIMAGE IS NOT NULL AND
ONCENTLEV_ENTGATE in ( 'MainOncEntGate' ,  'BackOncEntGate' , 'HakYOncEntGate',  'DormOncEntGate' ) 
AND   ONCENTLEV_ENTIMAGE <> ''
AND ONCENTLEV_ENTDATE BETWEEN '2008-08-23 00:00:00'  AND  '2008-08-23  23:59:59'     
ORDER BY ONCENTLEV_ENTDATE DESC

이거랑 같다고보면 일치값 하나만 갖고 온겁니다.
임진표(운가라)님이 2008-08-28 16:05에 작성한 댓글입니다.
이 댓글은 2008-08-28 16:15에 마지막으로 수정되었습니다.

제가 의도한 바와 다른것 같내용..^^ 쉽게 말하면 
 No   Dept   Name
  1     A        H
  2     B        A
  3     A        C
  4     C        D
  5     C        V

이러한 테이블이 있다고 가정할때, Dept A인 최근인 것와, Dept인 B인 최근것과 C가 최근인것을 원하는것인데. 밑에 테이블과 같이
  
    Dept  Name   No
    A        C        3
    B        A        2
    C        V        5

황병득님이 2008-08-28 17:02에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
4426정렬 질문입니다.. 구룹바이 한것....요
쿼리땜에미쳐
2008-08-28
5115
4425셀렉트에서 도움좀 부탁드립니다. [1]
도움좀
2008-08-28
4789
4424프로시저 내부에서 다른 프로시저를 호출하려 합니다. 그때... [2]
정원식
2008-08-28
5495
4423쿼리구문 좀 봐주세여..^^ [2]
황병득
2008-08-28
5676
4422mysql 성능이 리눅스에 미치는 영향
2008-08-28
5076
4420SQL-Server 2005 S.P 관련 질문입니다. [2]
전순호
2008-08-28
5669
4419아래글 보완 설명 [2]
임철수
2008-08-28
4906
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다