0

テーブル A b と c に 3 つの列があります。a が null でない場合は a を返したいが、null の場合は b + c を返したい。

私はそれでうまくいくと思ってい Select Coalesce(a, b + c) from table1 ましたが、構文が間違っていることを示唆しているようには見えません。私が試したこの各バリアントは、a が null であるため、b & c の連結を返す必要がある場合でも、列 a に null 値を返すようです。よろしくお願いします。

構文は正しいと思いますが、Coalesce の使い方が間違っています。

3 列の 2 つのテーブル:

Fred Flinstone Tyres    Fred    Flinstone
Norman Greembaum        Norman  Greenbaum
NULL                    Dave    Collins


NULL    2   3
4   5   6
8   6   8
NULL    2   7

申し訳ありませんが、2 番目の書式設定は適切ではありませんが、十分なはずです。Coalesce は、int データ型を使用する場合は下のテーブルで機能するようですが、nvarchar を使用する場合は上のテーブルでは機能しないようです。通常はもちろん、私が関心を持っているのは一番上のテーブルです。3 行目に Dave Collins を返してもらいたいと思います。

4

5 に答える 5

3

単純に ISNULL(a, b+c) で十分です。さらに、その SQL 標準も連結用です。

ISNULL(a, CAST(b as varchar) + CAST(c as Varchar))

および算術演算用

ISNULL(a, ISNULL(b, 0) + ISNULL(c, 0))
于 2013-01-11T08:47:20.730 に答える
0

'b'と'c'を確認してください。1+nullを合計すると、nullになるため、そのうちの1つはnullだと思います。

于 2013-01-11T08:04:03.740 に答える
0

使用する

SELECT COALESCE(a, b + c, b, c) FROM table1

また

SELECT COALESCE(a, IsNull(b + c,0)) FROM table1

次に、nullではないことを確認する値を取得します。あなたの場合、あなたの値はおそらくnullです。http://msdn.microsoft.com/en-us/library/ms190349.aspxも確認してください

アップデート:

DECLARE @table TABLE(a int, b int, c int);
INSERT INTO @table (a,b,c) VALUES (null, 1, 2);
INSERT INTO @table (a,b,c) VALUES (null, 2, 2);
INSERT INTO @table (a,b,c) VALUES (1, 3, 2);
INSERT INTO @table (a,b,c) VALUES (2, 4, 2);

SELECT COALESCE(a,b+c) FROM @table

結果:

3 4 1 2

予想通り。

于 2013-01-11T08:08:46.320 に答える
0

A または B のいずれかが NULL になる可能性があるという変更がある場合。

ISNULL(a, ISNULL(b + c), 0)

または

COALESCE(a, b + c, 0)
于 2013-01-11T08:53:36.677 に答える
-1

SELECT COALESCE(A,B+C) FROM TABLE1 テーブル TABLE1 と列 A、B、C があり、IF THE VALUE OF (A=NULL) AND IF THE VALUE OF (B OR C) IS NULL THEN IT will return NULL VALUE
table

abc

1 2 3 1 NULL 3 2 NULL 3 2 NULL 4 NULL 2 4 NULL 2 NULL

その後、テーブル1から合体(a、b + c)を選択します

1 1 2 2 6 ヌル

于 2013-01-11T08:43:42.420 に答える