2016-12-13 17 views
0

私は最近、このSQL文のバリエーションを使用してレポートを書きました:nullまたはnullでない場合は値を返します。 TSQL

select project.*, TF.*, TW.*, TR.*, TH.* from 
(select sum(Quantity) as FQty from unitType where Type = 'F' group by type) TF, 
(select sum(Quantity) as WQty from unitType where Type = 'W' group by type) TW, 
(select sum(Quantity) as RQty from unitType where Type = 'R' group by type) TR, 
(select sum(Quantity) as HQty from unitType where Type = 'H' group by type) TH 

問題は、ユニットの種類を持っているdoesntのプロジェクトは、そのユニットのタイプのSQL文が、その後、私を作る何も返さない場合ということです文全体が何も返しません。私はnullを返すようにする方法を見つけようとしていますが、何も私にとってうまくいかないようです。私はCaseを試みましたが、 "isnullは無効なカラム名です"ということを私に伝えます。 "if exists"を試みていますが、構文エラーをスローします。

提案がありますか? SELECT SUM(QUANTITY) AS FQTY FROM (SELECT CASE WHEN QUANTITY IS NULL THEN 0 ELSE QUANTITY END QUANTITY FROM....)

+0

SQLが完全に機能する4つのタイプのプロジェクトがあります。 1つの型がない場合、プロジェクトのレポート全体がnullを返します。 –

+0

あなたの 'FROM'句の' project'テーブル/エイリアスはどこですか? – DVT

+0

これはひどくトリミングされたdown文です。私は選択のうちの1つにそれをトリミングすることができたと思う。 –

答えて

0

は、ケースにしてみてください。行の数は...* number of row of TF * number of row of TW *...となり、数値の1つが0の場合、結果は0となります。

+0

ステートメントに対して返される行がある場合、これは完全に機能します。行を持たないタイプのいずれかで使用された場合は何も返しません。 –

0

はこれを試してみてください:

OUTER APPLY (select sum(Quantity) as FQty from unitType where Type = 'F' group by type) TF 
OUTER APPLY (select sum(Quantity) as WQty from unitType where Type = 'W' group by type) TW 
OUTER APPLY (select sum(Quantity) as RQty from unitType where Type = 'R' group by type) TR 
OUTER APPLY (select sum(Quantity) as HQty from unitType where Type = 'H' group by type) TH 

は、あなたが使用し、JOINためCROSSの0行を得たとき

+0

すぐにVS2015の 'OUTER'の近くに構文エラーが表示されます。 –

+0

VS 2015?まず、クエリを個別にテストしないでください。 – DVT

+0

それは私が使用するように与えられたツールです。 –

関連する問題