1

次のようなSQLクエリがあります。

SELECT 
COALESCE(field1, 0) AS field1, 
COALESCE(field2, 0) AS field2,
COALESCE(field3 - field1 - field2, 0) AS field
FROM ...

However the problem with it is that given say:

field1 = 1
field2 = 0
field3 = 2

出力が表示されると、2 - 1 - 0 = 1 にもかかわらず、field3 は 0 を示します。

COALESCE は、Null 値になる可能性のあるいくつかのテーブルを外部結合したままにするために使用されます。

また、field3 が null の場合、私にも問題がありますか?

ありがとうございました

4

2 に答える 2

5

合体を個別に行います。

SELECT COALESCE(field1, 0) AS field1, COALESCE(field2, 0) AS field2,
       COALESCE(field3, 0) - coalesce(field1, 0) - coalesce(field2, 0) AS field
FROM ...

あなたの例については、それfield2は実際NULLには0ではないと思います。

于 2013-04-01T13:13:43.750 に答える
1

同じレベルで指定された別名を使用して計算することはできません。関数をもう一度繰り返すか、プライマリ計算をサブクエリでラップする必要があります。

SELECT  field1, field2,
        field3 - (field1 + field2)
FROM
        (
            SELECT  COALESCE(field1, 0) AS field1, 
                    COALESCE(field2, 0) AS field2, 
                    COALESCE(field3, 0) field3
            FROM    TableName
        ) x

その理由は、SQL 操作の順序が次のとおりであるためです。

  • FROM 句
  • WHERE句
  • GROUP BY 句
  • HAVING 句
  • SELECT句
  • ORDER BY 句

ALIASステートメントで与えられ、SELECTそれらが作成されたレベルではアクセスできません。

于 2013-04-01T13:15:27.317 に答える