2016-09-28 2 views
1

다른 값을 포함하도록 확장해야하는 작동 진술서가 있습니다. 그 값은 0입니다. 다음과 같이 지금, 내 문은 : 나는 성공없이 OR 연산자이를 다시 작성하는 몇 가지 방법을 시도SQL Server : OR 문과 함께 NULL 인 경우를 결합하는 방법

CASE 
    WHEN dbo.tbl.Price IS NULL 
     THEN CAST(dbo.tbl.cost AS NUMERIC(18 , 1)) * 2.2 
    ELSE dbo.tbl.Price 
END 

.

CASE 
    WHEN dbo.tbl.Price IS NULL 
     THEN CAST(dbo.tbl.cost AS NUMERIC(18 , 1)) * 2.2 
    OR WHEN 0 
     THEN CAST(dbo.tbl.cost AS NUMERIC(18 , 1)) * 2.2 
    ELSE dbo.tbl.Price 
END 

누구나 지원 가능 : 다음을 포함

?

감사

답변

2

당신은 case 문이 필요하지 않습니다는 명시 적으로,이를 위해 설계 isNull(arg1, arg2)라는 또 다른 기능이 있습니다. 이 함수는 null이 아닌 경우 첫 번째 인수를 반환하고 첫 번째 인수가 null 인 경우 두 번째 인수를 반환합니다.

isNull(dbo.tbl.Price , CAST(dbo.tbl.cost AS NUMERIC(18 , 1)) * 2.2) 

당신은 또한 쓸 수 있도록, null가 아닌 목록의 첫 번째 하나를 인수의 수에 2를 취하고 반환 coalesce()라는 일반적인 fiunction이 실제로 특별한 경우 :

coalesce(dbo.tbl.Price , CAST(dbo.tbl.cost AS NUMERIC(18 , 1)) * 2.2) 

dbo.tbl.Price = 0 일 때 더 복잡한 식을 반환하기를 원하므로 첫 번째 인수가 두 번째 인수와 같으면 null을 반환하는 함수 NullIf(arg1, arg2)을 사용해야하며 첫 번째 인수가 같지 않으면 첫 번째 인수를 반환합니다.

isNull(Nullif(dbo.tbl.Price, 0), CAST(dbo.tbl.cost AS NUMERIC(18 , 1)) * 2.2) 

또는

coalesce(Nullif(dbo.tbl.Price, 0), CAST(dbo.tbl.cost AS NUMERIC(18 , 1)) * 2.2) 
+0

감사 찰스 시도,이 문 작동하지만 명령문의 일부가 삽입되고 따 tbl.Price 값이 NULL 모든 기록에 테이블 "아래 스 니펫은 테이블에있는 것입니다. CAST (dbo.zItemInventoryAll.Factor AS NUMERIC (18, 1)) * 2.2 –

+0

아무 것도 분명하지 않습니다. 'xItemInventory.Factor'는 어디에서 왔습니까? 그 문법이나 이름 또는 무엇이든 당신의 질문 어디에도 언급되어 있지 않은 것. 사용중인 실제 SQL과 SQL 표현식의 출력으로보고있는 전체 결과를 확인 (또는 게시)하십시오. –

+0

죄송합니다. 테이블 이름을 단순화하고 잊어 버렸습니다. 셀 내용을 내 클립 보드에 복사하면 CAST (dbo.tbl.cost AS NUMERIC (18, 1)) * 2.2 –

0

CASE 
    WHEN dbo.tbl.Price IS NULL THEN CAST(dbo.tbl.cost AS NUMERIC(18 , 1)) * 2.2 
    WHEN dbo.tbl.Price = 0 THEN CAST(dbo.tbl.cost AS NUMERIC(18 , 1)) * 2.2 
    ELSE dbo.tbl.Price 
END 
+1

또는 더 간단한 경우 tbl.Price가 NULL이거나 tbl.Price = 0 인 경우 (tbl.Price, 0) = THEN ..... 하나의 조건에서 다른 조건으로 동일한 수식을 복사하지 않아도됩니다. – Matt

+0

감사 인사,이 문은 오류가 발생합니다. 특히 : varvhar 값 '1599.00'을 데이터 유형 int로 변환 할 때 변환에 실패했습니다. Matt, 간단한 진술에 대해 자세히 설명해주십시오 : CASE ISEN ISNULL (tbl.Price, 0) = 그럼 제발? –

+0

@BL - 오류 발생을 생각할 수있는 유일한 이유는 tbl.Price가 숫자 데이터 유형이 아니라는 것입니다. "ELSE CAST (tbl.price as Numeric (18,1)"에서처럼 else 표현식을 숫자로 변환 해보십시오. – ash