2012-06-06 6 views
2
여기

으로보기에 열을 계산 내 상황SQL 서버 추가 조건

- Price (decimal (15,4) 
- TaxId (int) 

TaxId 값은 어디에도 저장되지 않고 있지만 두 개의 값 (actualy 3가있다).

- 1 (8.5%) 
- 2 (20%) 
- NULL (no tax) 

이제 세금이 포함 된 새로운 가격을 계산할 계산 열이 필요합니다.

아이디어가 있으십니까?

내가 좋아하는 뭔가 갔다 :

SELECT... 
CASE TaxId 
    WHEN 1 THEN Price *1.085 AS test 
    WHEN 2 THEN Price *1.2 AS test 
    WHEN NULL THEN Price AS test END 
FROM... 

UPDATE :

내가 성공 쿼리를 실행하는 데 성공했다.

CASE dbo.Table.TaxId WHEN 1 THEN dbo.Table.Price*1.085 WHEN 2 THEN dbo.Table.Price*1.2 ELSE dbo.Table.Price END AS CalcualtedPrice 

이제 CalculatedPrice를 십진수 (15,4)로 만들면됩니다. 어떻게 설정할 수 있습니까?

+1

당신의 구문을 수정해야

: 질문이 편집 된 후 첫 null이 아닌 값

UPDATE을 반환 COALESCE() "... 그리고? 그 결과는 무엇입니까? –

+0

내 질문을 업데이트했습니다. – no9

+1

'CAST (CASE ... END AS 10 진수 (15,4)) AS CalculatedPrice'? –

답변

4

예, Google은 SQL Server에서보기를 만들고보기의 SELECT 문에서 Price 열에 TaxId 열을 곱하는 방법을 설명합니다. 당신이 NULL 값을 고려해야하기 때문에 당신은 당신이 당신의 열에서 '8.5'이 아니라 '8.5 %'를 가지고 있다고 가정이

SELECT 
Price * (1 + COALESCE(TaxId/100), 0) AS newValue 
... 

같은 COALESCE을 사용해야합니다. 그것은 varchar 또는 아닙니다?

PS : 당신은 그냥 약간 "내가 좋아하는 뭔가를 갔다

SELECT 
CAST(
CASE 
    WHEN TaxId = 1 THEN Price *1.085 
    WHEN TaxId = 2 THEN Price *1.2 
    WHEN TaxId IS NULL THEN Price END AS decimal(15,4) 
) AS CalculatedPrice 
FROM... 
+0

저는 실제 세금 값이 단지 일부 코드 (정수)가 아닙니다. 나는 1이 8.5이고, 2가 20이라는 것을 알고있다. 그리고 그것은 또한 아무런 세금도 의미하지 않는 NULL 일 수있다. TaxID를 기준으로 가격을 계산할 추가 열이 하나 필요합니다. – no9

+0

편집 "나는 이런 식으로 갔다 ..."괜찮아 보인다. 뭐가 문제 야? 아,하지만 "AS test"를 지우고 "END"다음에 "CASE WHEN ... END AS test"와 같이 한 번 쓰십시오. – fancyPants

+0

잠깐, 오류를 발견했습니다 ... 내 대답을 편집 할 것입니다. – fancyPants