2016-09-22 11 views
1

データベース:SQL Server2つのケースステートメントを控除

これは本当に簡単です。私は購入注文のクエリを持っており、2つのケースステートメントを減算しようとしていますが、問題が発生して動作しています。私は、中に発注データを引き出すために一時テーブルを使用しています

下記を参照のクエリ:。

--temp table for PO Inventory lines 
select 
prchseordr_id, 
ISNULL (sum(prchseordrlst_cst_extndd),0) as Inv_Cost 
INTO #TempPOInv 

from prchseordr 
left outer join prchseordrlst on prchseordr.prchseordr_rn = prchseordrlst.prchseordr_rn 
where prchseordr_nxt_id = '' 
group by prchseordr_id 
-------------------- 
--temp table for PO General lines 
select 
prchseordr_id, 
ISNULL (sum(prchseordrlstgn_cst_extndd),0) as Gen_Cost 
INTO #TempPOGen 

from prchseordr 
left outer join prchseordrlstgn on prchseordr.prchseordr_rn = prchseordrlstgn.prchseordr_rn 
where prchseordr_nxt_id = '' 
group by prchseordr_id 
-------------------- 
--temp table for PO Subcontractor lines 
select 
prchseordr_id, 
ISNULL (sum(prchseordrlstsb_cntrct_amnt_orgnl),0) as Sub_Cost 
INTO #TempPOSub 

from prchseordr 
left outer join prchseordrlstsb on prchseordr.prchseordr_rn = prchseordrlstsb.prchseordr_rn 
where prchseordr_nxt_id = '' 
group by prchseordr_id 

------------------------------------------------------------ 
Select 
vndr_nme as [Vendor Name], 
sum(CASE WHEN prchseordr_type = 'Purchase' THEN Inv_Cost + Gen_Cost + Sub_Cost else 0 end) Purchases, 
sum(CASE WHEN prchseordr_type = 'Credit' THEN Inv_Cost + Gen_Cost + Sub_Cost else 0 end) Credits 
from prchseordr 
left outer join #TempPOInv on prchseordr.prchseordr_id = #TempPOInv.prchseordr_id 
left outer join #TempPOGen on prchseordr.prchseordr_id = #TempPOGen.prchseordr_id 
left outer join #TempPOSub on prchseordr.prchseordr_id = #TempPOSub.prchseordr_id 
join vndr on prchseordr.vndr_rn = vndr.vndr_rn 
where prchseordr.prchseordr_entrd_dte between @[email protected] and @[email protected] 
and prchseordr_rn <> 0 
group by vndr_nme,prchseordr_type 
order by vndr_nme 


DROP TABLE #TempPOInv 
DROP TABLE #TempPOGen 
DROP TABLE #TempPOSub 
かなり基本的な

を私はちょうど購入注文の合計額を取得するために、クレジットからの購入を減算します。この仕事をする最良の方法は何ですか?

+0

select x.[Vendor Name] ,x.Credits - x.Purchases [Profit] from ( Select vndr_nme as [Vendor Name], sum(CASE WHEN prchseordr_type = 'Purchase' THEN Inv_Cost + Gen_Cost + Sub_Cost else 0 end) Purchases, sum(CASE WHEN prchseordr_type = 'Credit' THEN Inv_Cost + Gen_Cost + Sub_Cost else 0 end) Credits From ... ) x 

または:

その後、最も読みやすいのと同様に、サブクエリまたはCTEにそれを置くことであろうする。結果として何を得ようとしていますか? – Siyual

+0

'prchseordr_type'が' Purchase'と 'Credit'の両方になることはできないので、私はあなたが引くことができるものを見ません。グループ化やその他の仕組みが欠けているようです。 –

+0

あなたが選択したどちらの答えにも注意して、あなたがあなたの '..._ Cost'カラムのまわりに' ISNULL(..._ Cost、0) '(またはそれに類するもの)それらの値。そうでなければ 'NULL + AnyValue = NULL'を返します。 – BJones

答えて

1

あなたのケース文を見る - あなたはケースに基づいて合計します。あなたがしようとしているものを説明するためにいくつかのサンプルデータを含めてください

;with x as (
    Select 
     vndr_nme as [Vendor Name], 
     sum(CASE WHEN prchseordr_type = 'Purchase' THEN Inv_Cost + Gen_Cost + Sub_Cost else 0 end) Purchases, 
     sum(CASE WHEN prchseordr_type = 'Credit' THEN Inv_Cost + Gen_Cost + Sub_Cost else 0 end) Credits 
    From ... 
) 
select 
    x.[Vendor Name] 
    ,x.Credits - x.Purchases [Profit] 
from x 
+0

CTEを動作させることができませんでした。私は上記の完全な質問を含んだ。 –

+0

私は打ち間違いがありました。閉じた後の 'x'はそこにはいけません。編集されました。 –

+0

ありがとう!私はそれを働かせました。私は私が必要としたことを理解していなかった。すべてを別々に保つ私は午前中にCTEを働かせようとしていました。ヘルプをよろしくお願いいたします。 –

1

方法のカップル... 1がCTE

ある
;with cte as(
Select 
vndr_nme as [Vendor Name], 
sum(CASE WHEN prchseordr_type = 'Purchase' THEN Inv_Cost + Gen_Cost + Sub_Cost else 0 end) Purchases, 
sum(CASE WHEN prchseordr_type = 'Credit' THEN Inv_Cost + Gen_Cost + Sub_Cost else 0 end) Credits 
from prchseordr 
left outer join #TempPOInv on prchseordr.prchseordr_id = #TempPOInv.prchseordr_id 
left outer join #TempPOGen on prchseordr.prchseordr_id = #TempPOGen.prchseordr_id 
left outer join #TempPOSub on prchseordr.prchseordr_id = #TempPOSub.prchseordr_id 
join vndr on prchseordr.vndr_rn = vndr.vndr_rn 
where prchseordr.prchseordr_entrd_dte between @[email protected] and @[email protected] 
and prchseordr_rn <> 0 
group by vndr_nme,prchseordr_type) 

select 
    [Vendor Name], 
    Purchases, 
    Credits, 
    Purchases - Credits as NewColumn 
from cte 
+0

CTEを動作させることができませんでした。私は完全なクエリを含めるように投稿を更新しました。 –

+0

@AdrianWarness私は私の答えを編集しました。ちょうどあなたのコードのその部分を置き換えます。あなたがを含めることを確認してください; cteの前に – scsimon

+0

私はばかです!私は午前中にCTEをしようとしていますが、私はそのことについて知らなかった。すべてを分けるどうもありがとうございます! @AdrianWarness the –