Q&A

  • 퀴리에서 나눗셈 에러처리
SQL2000Sever에서
select A, B, B*100/A From~에서 B값의 비율을 낼때,
A가 Null이거나 제로일때 에러 처리하는 방법 좀 칼켜주세요...
부탁합니다.
4  COMMENTS
  • Profile
    Wookey 2002.12.14 22:10
    감사하다는 인사 말씀 늦었습니다.
    님들의 성의 있는 답변으로 문제가 모두 해결 되었습니다.
    다시 한번 감사합니다.


  • Profile
    KDDG_Hoya 2002.12.11 18:29
    값이 Null 일때..
    계산을 못하니..
    필드가 null 일시 0 으로 처리하면 될 것 같네요.

    아래는 -.- Book Online 도움말 입니다. 수고하세요..

    Coalesce(a, 0) = A필드가 Null 일시 0을 반환합니다.

    COALESCE
    해당 인수 중에서 Null이 아닌 첫 번째 식을 반환합니다.

    구문
    COALESCE ( expression [ ,...n ] )

    인수
    expression

    임의의 형식의 식입니다.

    n

    여러 식을 지정할 수 있음을 나타내는 자리 표시자입니다. 모든 식이 동일한 형식이거나 동일한 형식으로 암시적 변환이 가능해야 합니다.

    반환 형식
    expression과 동일한 값을 반환합니다.

    비고
    모든 인수가 NULL이면 COALESCE는 NULL을 반환합니다.

    COALESCE(expression1,...n)는 다음 CASE 함수와 동일합니다.

    CASE
       WHEN (expression1 IS NOT NULL) THEN expression1
       ...
       WHEN (expressionN IS NOT NULL) THEN expressionN
       ELSE NULL

    예제
    다음 예제에는 직원의 연봉 정보에 대한 3개의 열 hourly_wage, salary, commission이 포함된 wages 테이블이 나옵니다. 그러나 각 직원은 이 중 한 종류의 급여만 받습니다. 모든 직원에게 지급된 전체 급여액을 확인하려면 COALESCE 함수를 사용하여 hourly_wage, salary, commission에서 검색된 Null이 아닌 값만 포함시킵니다.

    SET NOCOUNT ON
    GO
    USE master
    IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
          WHERE TABLE_NAME = 'wages')
       DROP TABLE wages
    GO
    CREATE TABLE wages
    (
       emp_id      tinyint    identity,
       hourly_wage   decimal   NULL,
       salary      decimal    NULL,
       commission   decimal   NULL,
       num_sales   tinyint   NULL
    )
    GO
    INSERT wages VALUES(10.00, NULL, NULL, NULL)
    INSERT wages VALUES(20.00, NULL, NULL, NULL)
    INSERT wages VALUES(30.00, NULL, NULL, NULL)
    INSERT wages VALUES(40.00, NULL, NULL, NULL)
    INSERT wages VALUES(NULL, 10000.00, NULL, NULL)
    INSERT wages VALUES(NULL, 20000.00, NULL, NULL)
    INSERT wages VALUES(NULL, 30000.00, NULL, NULL)
    INSERT wages VALUES(NULL, 40000.00, NULL, NULL)
    INSERT wages VALUES(NULL, NULL, 15000, 3)
    INSERT wages VALUES(NULL, NULL, 25000, 2)
    INSERT wages VALUES(NULL, NULL, 20000, 6)
    INSERT wages VALUES(NULL, NULL, 14000, 4)
    GO
    SET NOCOUNT OFF
    GO
    SELECT CAST(COALESCE(hourly_wage * 40 * 52,
       salary,
       commission * num_sales) AS money) AS 'Total Salary'
    FROM wages
    GO

    결과 집합은 다음과 같습니다.

    Total Salary
    ------------
    20800.0000
    41600.0000
    62400.0000
    83200.0000
    10000.0000
    20000.0000
    30000.0000
    40000.0000
    45000.0000
    50000.0000
    120000.0000
    56000.0000

    (12개 행 적용됨)
  • Profile
    열심히 2002.12.10 23:56
    select A, B, B*100/decode(A,null,1,0,1,A)
    from ~
    오라클 문법입니다..SQL2000에서는 함수가 다를지도 모릅니다.
    위와같이 하면 에러는 방지가 가능하죠..

  • Profile
    김지엽 2002.12.11 01:12
    SET ARITHABORT OFF - 산술오류로 이상 종료하지 않는다.
    SET ARITHIGNORE ON - 산술오류를 무시한다.
    SET ANSI_WARNINGS OFF - 경고를 표시하지 않는다.

    이렇게 세팅해 주면 에러가 발생하지 않고 NULL값이 넘어올 것입니다.
    그러니깐, 만약에 식이 a/b 이라면..
    위와 같이 세팅해주고 ISNULL(a/b, a) 이러면 b가 0일 때는 a 값이 넘어오지 않을까 싶네요.

    저도 오라클만 주로 다뤄봐서, MS-SQL에서는 어떻게 하면 나눗셈연산을 수행할 수 있을지 잘 모르겠지만요.. 일단 MS-SQL에서는 CASE연산자를 사용할 수 있으니까.. 그놈을 잘 사용하면 되지 않을까 싶기도 하구..
    • 열심히
      2002.12.17 01:15
      간단하게 DBMemo 컴퍼넌트를 쓰면 됩니다.. 그럼 쿼리 오픈되면 현재 커서의 memo란 필드가 들어가게 됩...
    • 최은석
      2002.12.11 20:00
      옵션에 있습니다.. Options 밑에 dgAlwaysShowSelection 이란 넘이 있져 이넘을 False 로 해주시면 됩니...
    • 김상수
      2002.12.12 02:25
    • 장민우
    • 2002.12.11 02:07
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 이달원
      2002.12.11 02:21
      우선은 가장 좋은 방법은 한번 해보시는게 좋을것 같습니다. 일반적인 DLL로드 방식을 해보시고 안되면 I...
    • 윤승환
      2002.12.11 02:19
      wrapper dll을 작성하시는 방법을 권합니다. extension -> regular -> delphi
    • 장민우
      2002.12.11 02:39
      답변해주셔서 감사합니다. '확장DLL' 은 사실 저도 책보고 첨 알았습니다... ^^; 그리고 wrapper dll ...
    • 윤승환
      2002.12.11 19:38
      VC++에서는 C 스타일(regular)의 표준 dll과 MFC Class포인터를 인자를 자유롭게 넘겨줄 수 있는 Extension...
    • 박홍재
      2002.12.11 02:53
      정확하게 현재 어떤식으로 DB Table이 구성이 되어있는지 몰라 질문을 이해할 수가 없군요. 우선 간단하게 ...
    • 질문걸
    • 2002.12.11 01:56
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 박홍재
      2002.12.11 02:44
      -------------------------------------------------- 어떤 식으로 구현을 하려고 하시는 지 모르겠군요. ...
    • 질문걸
      2002.12.11 19:10
      답변 감사합니다...^^
    • Wookey
    • 2002.12.10 23:09
    • 4 COMMENTS
    • /
    • 0 LIKES
    • Wookey
      2002.12.14 22:10
      감사하다는 인사 말씀 늦었습니다. 님들의 성의 있는 답변으로 문제가 모두 해결 되었습니다. 다시 한번...
    • KDDG_Hoya
      2002.12.11 18:29
      값이 Null 일때.. 계산을 못하니.. 필드가 null 일시 0 으로 처리하면 될 것 같네요. 아래는 -.- B...
    • 열심히
      2002.12.10 23:56
      select A, B, B*100/decode(A,null,1,0,1,A) from ~ 오라클 문법입니다..SQL2000에서는 함수가 다를지도 ...
    • 김지엽
      2002.12.11 01:12
      SET ARITHABORT OFF - 산술오류로 이상 종료하지 않는다. SET ARITHIGNORE ON - 산술오류를 무시한다. SE...
    • 짜앙구
    • 2002.12.10 21:17
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 전원이
    • 2002.12.10 20:57
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.12.10 21:56
      안녕하세요. 최용일입니다. 델파이의 비트연산자에는 shl, shr, or, and, xor등이 있습니다... C의 S...
    • 권오진
    • 2002.12.10 20:33
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2002.12.10 22:29
      박후선 님은 아주 유명하신 분이시져..^_^ 도움되시길 바라구여~ 항상 즐거운 프로그래밍 하시길~ ...
    • 황준동
      2003.10.09 00:43
      답변이 될지는 모르겠지만요. 제가 경험한 바로는 이런 문제가 있습니다. 다름이 아니라 한글 때문에 그런...
    • 열심히
      2002.12.10 22:22
      이거 DBLookUpComboBox쓰면 될것 같은데요... 그리고 CloseUp(선택되서 콤보박스의 리스트가 펼쳐진게 ...
    • LuckyBoy
      2002.12.10 19:49
      ComboBox1 : 대분류 ComboBox2 : 중분류 ComboBox3 : 소분류 라고 예를 들어보겠습니다... ComboBox...
    • 신명호
    • 2002.12.10 18:49
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 열심히
      2002.12.11 00:04
      님 무슨 말씀하시는지 모르겠네요.. 소스가 없다뇨??....아직 못만들었단 얘긴가? 만약에 조건을 입...
    • 델파이탐크루즈
      2002.12.10 21:15
      에러난 말 그대로 입니다. DataSet이 Insert 또는 Edit 모드가 아니라서 에러가 나는겁니다. 그러니 ...
    • 김재현
    • 2002.12.10 10:39
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 박홍재
      2002.12.11 02:57
      -------------------- 크랙은 아니 되구요...ㅠ.ㅠ 만드신 분에게 소스를 달라구 하시던가 아니면 새로 ...
    • 이철희
    • 2002.12.10 07:53
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.12.10 08:21
      안녕하세요. 최용일입니다. 매크로는 상수나 함수로 바꾸시면 됩니다. interface const  &n...
    • 하병준
    • 2002.12.10 07:15
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 델파이탐크루즈
      2002.12.10 21:12
      이렇게 하시면 될듯 싶군요... procedure TForm.FormActivate(Sender: TObject); begin   (...
    • 하병준
      2002.12.10 23:50
    • 강환춘
    • 2002.12.10 06:13
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 열심히
      2002.12.10 22:07
      뭘 수정 하실건지라도 알져주시지요..... 누구더러 찾으시라는건지...뭐가 잘못된거지 써주세요
    • 강환춘
      2002.12.11 01:47
      죄성합니다. 찾았습니다. 그래두 읽어 주셔서 감사합니다. 위에 다른 질문 올리겟습니다. 그것도좀 봐주세...