1

ProductNameQty、およびその他の列を返すビューがあります

次のように定義されます。

SELECT ProductName, Qty, /* etc. */ 
FROM SomeConcreteTable

SomeConcreteTableとを定義ProductNameします。nvarchar(40)Qtyfloat

SELECT ProductName, SUM(Qty) 
FROM MyView
GROUP BY ProductName

これにより、エラーが発生します

オペランドのデータ型 nvarchar は合計演算子に対して無効です

ビューが行を返さない場合、行をWHERE返すようにビューの条件を変更してもエラーは発生しません。

SELECT ProductName, SUM(COALESCE(vStarts.LotQty, 0))
FROM MyView
GROUP BY ProductName

ビューが行を返すかどうかに関係なく機能します。

この投稿で、Lieven Keersmaekers は、クエリでの匿名型の使用には、型のカウントが推測されないため、同じ問題があったと述べています。

理にかなっています。

ただし、私の場合、型は推論されるべきではありません-それらはテーブルからのものです。

そのようなよく悪用される質問をするつもりはありませんが、これはバグですか?

合計が null 許容 float (varchar ではなく) に対するものである場合に、行がない場合の合計でこのエラーが発生するという予期しない動作のようです。

Microsoft SQL Server 2012 (SP1) - 11.0.3482.0 (X64)

4

4 に答える 4

6

最初に列をキャストする必要があり、それは機能します

SELECT SUM(CAST(Qty as int)) // change to desired type, int for example purposes only
于 2015-06-12T19:13:14.857 に答える
0

MyView のビュー定義が Qty を FLOAT から NVARCHAR に CAST または CONVERT する可能性があります。SUM にキャスト/変換する必要がある場合があります。

于 2015-06-12T19:09:35.750 に答える
0

私は同じ問題を抱えていましたが、解決策は非常に簡単でした:
Sum( 0 +Qty)

于 2016-10-26T13:22:12.563 に答える
0

問題を解決しましたが、原因が見つかりませんでした。トラブルシューティングの「ランダムなことを試す」フェーズで、SSMS でビューを開き、FROM明示的なDatabase.Schema.Table表記法を使用するように行を変更しました。以前に必要だった がなくてもエラーは発生しませんCOALESCE。暗黙の構文に戻しました。まだ動作します。:肩をすくめる: 何かアイデアはありますか?

于 2015-06-12T21:42:37.910 に答える