2016-10-21 2 views
0

나는 이것을 작성하여 지난 30 일간 인보이스 요약을 작성했습니다. 인보이스를 확인하는 동안 고객의 대부분이 세금 면제이기 때문에 나는 많은 null을 가져 왔습니다. IF 문을 넣고 싶습니다. (IF t.TAXABL_23 = 'N'다음에 세금 = 1을내는 항목 ...) if 문은 if 문을 사용하거나 더 잘 사용합니다. IF 문은이를 수행하는 논리적 인 방법입니다. 감사합니다. .if 문은 어디에 넣어야합니까?

Select c.ordnum_31 as "Sales Order Number", 
    c.invce_31 as "Invoice Number",  
    c.custpo_31 as "Job Name", 
    c.ordid_31 as "Other Job Name", 
    c.invdte_31 as "Invoice Date", 
    cast (sum((1-(m.DSCRTE_23/100)) * (o.price_32 * o.shpqty_32)) as decimal (8,2)) as "Net Amount", 
    cast (c.frtamt_31 as decimal(8,2)) as Freight, 
    cast(((t.TAXRTE_25 * .01) * c.TAXTOT_31) as decimal (8,2)) as Tax, 
    cast (c.MSCAMT_31 as decimal(8,2)) as MISC, 
    cast(round (sum((1-(m.DSCRTE_23/100)) * (o.price_32 * o.shpqty_32)) + c.frtamt_31 + c.MSCAMT_31 + ((t.TAXRTE_25 * .01) * c.TAXTOT_31),1) as decimal(8,2)) as "Invoice Total" 

from Invoice_Master c 
    left join Invoice_Detail o on c.ORDNUM_31 = o.ORDNUM_32 
    left join Customer_Master m on c.CUSTID_31 = m.CUSTID_23 
    left join Tax_master t on m.TXCDE1_23 = t.TAXCDE_25 

where c.invdte_31 >= DATEADD(day,-30, getdate()) 

group by 
    c.ORDNUM_31, 
    c.CUSTID_31, 
    c.INVCE_31, 
    c.CUSTPO_31, 
    c.ORDID_31, 
    c.INVDTE_31, 
    c.frtamt_31, 
    c.taxtot_31, 
    m.dscrte_23, 
    c.MSCAMT_31, 
    t.taxrte_25 

order by "Invoice Number" 
+0

실제로 NULL입니까? 아니면 N입니까? – BJones

+0

몇 가지 샘플 데이터와 예상 출력을 포함 할 수 있습니까? –

+0

@bjones, 그들은 과세 플래그가 N 인 경우 NULL입니다. – Onyxtacular

답변

1

당신은 아마 CASE 표현식을 찾고 있습니다 :

... 
ISNULL(...calculate tax..., 0) AS tax -- yields 0 when the result of the expression is NULL 
... 
+0

첫 번째 예제를 시도해 보았습니다 .... 이것은 내가 생각해 낸 것입니다 : – Onyxtacular

+0

사례 t.TAXABL_23 = 'N' \t 다음 cast (round (sum ((1- (m.DSCRTE_23/100)) * (송장 합계)로 표시됩니다. ELSE \t \t 캐스트 (((t.TAXRTE_25 * .01) *) * + c.frtamt_31 + c.MSCAMT_31, 1) (1 - (m.DSCRTE_23/100)) * (o.price_32 * o.shpqty_32)) + c.frtamt_31 (세금 계산서, 세금 계산서, 세금 계산서) c.MSCAMT_31 + + ((t.TAXRTE_25 * 0.01) * c.TAXTOT_31), 1) "송장 전체"로서 소수 (8,2)), \t \t 단부로서 Invoice_Master C를,745에서 구문이 꺼져 있습니다 ... 답변을 확대 할 수 있습니까? 감사합니다 – Onyxtacular

+0

글쎄 그 의견은 쓰레기처럼 보이고 나는 그것을 삭제하는 방법을 찾을 수 없습니다 ... 죄송합니다 – Onyxtacular

0

:

... 
... as Freight, 
CASE WHEN t.TAXABL_23 = 'N' 
    THEN 0     -- exempt from taxes 
    ELSE ...calculate tax... 
END as Tax, 
... as MISC, 
... 

을 그렇지 않으면, 당신은 단지 몇 가지 값으로 null을 변환 할 경우, 당신은 ISNULL 식을 사용할 수 있습니다 COALESCE 변환하려면 NULLS

SELECT COALESCE(fieldWithNull, 'N'); 
+1

하나의 값만있는 경우 왜 'COALESCE'를 사용해야합니까? – Jens

+0

OP는 Null을 많이 사용하고 있으며 'NULL'대신 'N'을 원합니다. –

+0

네,하지만이 특별한 경우에'ISNULL'보다'COALESCE'를 선호하는 이유는 무엇입니까? 'ISNULL '은 나에게 논리적 인 선택처럼 보일 것이다. – Jens

관련 문제