質問

私はかなり複雑なことをしようとしています SELECT 一般化する計算:

  1. メインクエリは、テーブルのワイルドカード選択です
  2. 1つのサブクエリが行います COUNT() 条件に基づいたすべてのアイテムの(これは正常に機能します)
  3. 別のサブクエリが行います SUM() 別の条件に基づいた列の数字の。これも正しく機能しますが、記録が条件を満たしていない場合を除き、戻ります NULL.

私は最初、2つのサブ征服を加えたいと思っていました。 (subquery1)+(subquery2) AS total subquery2がnullでない限り、これは正常に機能します。 total subquery1の結果に関係なく、nullになります。私の2番目の考えは、2つのサブQuerieの計算である3番目の列を作成しようとすることでした(つまり、 (subquery1) AS count1, (subquery2) AS count2, count1+count2 AS total)しかし、2つの計算された列を計算することは不可能だとは思いません。たとえそうであっても、同じ問題が当てはまると感じています。

2つのサブクエリ値を取得して私のプログラムで合計する以外に、この問題に対するエレガントなソリューションがある人はいますか?

ありがとう!

役に立ちましたか?

解決

ここで起こっている2つの問題:

  • 同じ選択リストで別の式で1つの列エイリアスを使用することはできません。

    ただし、派生テーブルサブクエリにエイリアスを確立し、外部クエリで使用することができます。

  • nullで算術をすることはできません ヌルはゼロではありません.

    ただし、次のように「デフォルト」nullを非ヌル値にすることができます COALESCE() 関数。この関数は、最初の非ヌル引数を返します。

これが例です:

SELECT *, count1+count2 AS total
FROM (SELECT *, COALESCE((subquery1), 0) AS count1, 
                COALESCE((subquery2), 0) AS count2 
      FROM ... ) t;

(派生テーブルには、この例では「T」というテーブルエイリアスを与えなければならないことを忘れないでください)

他のヒント

まず、Coalesce関数は、ヌルの問題の世話をするのに役立つはずです。

組合を使用して、これらの2つのクエリを単一の結果セットに統合し、さらに分析するためのサブクエリとして扱うことができますか?

それとも、私はあなたの質問を完全に理解していませんでしたか?

私は(2番目のクエリの場合)を試してみます:select sum(isnull(mycolumn、0))//使用する前に構文を確認してください...

これにより、その列がゼロである場合、nullの代わりに0を返すはずです。

言うことは不要かもしれませんが、プログラム内でそれを使用しているため、携帯性の問題により、プログラムロジックを使用して2つの結果(nullと数)を合計したいと思います。

Coalesce関数がいつ廃止されたか、または別のDBMがそれをサポートしているかどうかは誰が知っていますか。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top