Q&A

  • SQL문중 case when 부분좀 봐 주세요..
오라클8.1.7 델파이5 입니다.
var  Tyear : double;
  Tyear := 2004;
with Query1 do begin
   close;
   sql.clear;
   sql.add(' select case when (2004-To_number(substr(pe_stdt,1,4))+1) between 15 and 90 then ''A15년이상'' ');
   sql.add('             when (2004-To_number(substr(pe_stdt,1,4))+1) between 10 and 14 then ''B10년이상'' ');
   sql.add('         end as 재직년수.....');

이럴때요...
--------------------
   10년이상   00명

--------------------
위처럼 한줄만 나옵니다. 15년 이상은 데이터가 없는경우죠...

질문1: 데이터가 없어도
---------------------
   15년 이상    
   10년 이상    00명
---------------------
이렇게 나오게 하려면 어찌해야 하나요?
질문2: 위SQL문중 2004를 변수를 받아서 처리 하고자 하는데여
  ''+Tyear+''  이것도 안되고,  '''+Tyear+''' 이것도 안되고....
보통 Double 형 변수는 ''+Tyear+'' 이리 사용하지 않나요?
2  COMMENTS
  • Profile
    손인호 2004.09.01 20:35
    현재상황의  결과를 얻으려면 여기에서 group by 재직년수 했을때죠?
    이때 데이타가 없으면 한줄만 나올 수도 있는거고요.
    두가지 케이스라면 case문이 아니라도 조건을 where밑에 넣고 union 문 쓰면 될것 같습니다.

    select '15년 이상' as 재직년수, count(*) as 숫자
    from ...
    where  (2004-To_number(substr(pe_stdt,1,4))+1) between 15 and 90
    union all
    select '10년 이상' as 재직년수, count(*) as 숫자
    from ...
    where (2004-To_number(substr(pe_stdt,1,4))+1) between 10 and 14

  • Profile
    major 2004.08.28 00:13



    안녕하세요..^^;

    넘 오랜만에 올라 왔더니.. 감회가 새롭네요..^^;

    님께서 하시고자 하는 1번은 저 같은경우에는 Copy Table을 사용해서 Outer
    Join을 해서 보여 주곤 하죠..^^; 답이 될지는 모르겠지만 저는 이전에 그렇게
    CopyT Table을 사용해서 Outer Join으로 해결 했던 기억이 있네요..

    그리고 2번은 같은 경우에는 걍 '+Tyear+'  이렇게 하시면 될 것 같은데요..
    ^^; 글구 참고로 TYear은 String변수로 잡아야서 사용을 하시면 돼요..
    그러니까 Double, Float, Int로 되어 있는 것은 String형으로 변환을 해서
    그 스트링을 쿼리에 '+Tyear+' 이렇게 하시면 될 것 같네요..

    그럼 즐프 하세염..