2016-10-21 5 views
0

私はこれを書いて、過去30日間の請求書の要約を作成しました。私が気付いた請求書をチェックしている間、私は多くの顧客が税金を免除されているので、多くのヌルを引いた。私はIF文を入れたいと思う(IF t.TAXABL_23 = 'N'で税を作る何か= 1 ...ここでちょっと灰色になる) if文はどこに行くの? IF文はこれを行う論理的な方法です。おかげさまで if文はどこに置くのですか?

おそらく、CASE式を探している
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

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

私はあなたの最初の例を試してみました....これは私が思いついたものです: – Onyxtacular

+0

ケース1 t.TAXABL_23 = 'N' \t次に、キャスト(round((1-(m.DSCRTE_23/100) 「請求書合計」として ELSE \t \tキャスト((t.TAXRTE_25 * .01)*)。 \t \tキャスト(ラウンド(合計)(1 - (m.DSCRTE_23/100))*(o.price_32 * o.shpqty_32))+ c.frtamt_31のキャスト(小数点(8,2)としてc.TAXTOT_31) + c.MSCAMT_31 +((t.TAXRTE_25 * 0.01)* c.TAXTOT_31)、1) "請求書の合計" としてDECIMAL(8,2))、 \t \t端としてInvoice_MasterのCから 構文はオフです...答えを広げることができますか?ありがとう – Onyxtacular

+0

よくコメントがうんざりのように見え、それを削除する方法を見つけることができません...ごめんなさい – Onyxtacular

0

:あなただけのいくつかの値にNULLを変換したい場合は、あなたがISNULL式を使用することができ、そうでない場合

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

使用するCOALESCE変換するNULLS

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

なぜ値が1つだけの場合に 'COALESCE'を使うのですか? – Jens

+0

OPはNULLが大量になり、 'NULL'の代わりに' 'N''が必要です。 –

+0

はい、なぜこのような場合に 'ISNULL'より' COALESCE'を好むのですか? ISNULLは私にとって論理的な選択のように思えるでしょう。 – Jens

関連する問題