2

ストアド プロシージャがあり、null 列を平均化したいと考えています。

これは私のストアドプロシージャです:

SELECT 
    AVG(planned) AS Planned,
    AVG(achieved) AS Achieved 
FROM 
    Port 
INNER JOIN 
    Technology ON Port.portID = Technology.portRef 

データソースを使用してこのストアド プロシージャをチャートにバインドし、列が null の場合、C# コードは次のエラーをスローします。

Decimal の値が大きすぎるか小さすぎます。

avgこれらの null 列に対してストアド プロシージャを処理するにはどうすればよいですか?

4

4 に答える 4

4

これは、クエリが値を返さない場合に発生します。これを使って

SELECT 
    coalesce(avg(planned),0) as Planned,
    coalesce(avg(achieved),0) as Achieved 
FROM 
    Port inner join Technology on Port.portID = Technology.portRef 
于 2012-07-13T08:17:33.940 に答える
2

別の方法

SELECT avg(isnull(planned,0))as Planned,avg(isnull(achieved,0))  as Achieved 
FROM Port inner join Technology on Port.portID = Technology.portRef 
于 2012-07-13T08:21:06.180 に答える
0

キーワードを使用するunpivot

select id, AVG(Q)
from (select * from myTable) a
unpivot(Q for QQ IN(Q1,Q2,Q3,Q4,Q5)) b
group by id

すべての列が の場合null、何も返されません。

于 2012-07-13T08:23:45.477 に答える
0

ISNULLと のどちらを使用するか混乱している人を何人か見てきCOALESCEました。強くお勧めしCOALESCEます。両方とも問題なく動作する場合ISNULLもありますが、適切に処理しないと間違った出力が得られる場合もあります。

以下のスニペットを確認してください。

SELECT  
    ISNULL(Nullif('test', 'test'), '12345') AS using_isnull,
    COALESCE(Nullif('test', 'test'), '12345') AS using_coalesce,
    ISNULL(Nullif('test', 'test'), 12345) AS int_using_isnull,
    COALESCE(Nullif('test', 'test'), 12345) AS int_using_coalesce
于 2012-07-13T09:01:10.243 に答える