2011-06-10 1 views
0

どのようにSQLの50列の名前を記載せずに複数の(50)複数のNULL値の間のNULL値を持つ列?このような状況を処理するより一般的な方法が必要ですか?SQL: - どのように取るか複数の(50)の間に多数のヌル値を持つ列、SQLで50列の名前を列挙せずに平均?

+0

このMySQLまたはSQL Serverですか? SQL ServerはMySQLにはない 'PIVOT'関数を知っているので、 –

+3

ここに答えが載っているかもしれません。しかし、長期的には、同じ種類のデータを含む複数の列がある場合(たとえそれらの平均をとることが意味をなさえていても)、別々の列に配置すべきではありません。テーブルを正規化することができれば、今後のクエリも開発しやすくする必要があります。 –

答えて

0

これを実現するには、現在のテーブルを転置する必要があるようです。私が知る限り、転置する正確な列を指定せずにMySQLテーブルを転置する方法はありません。だから、最良の方法は、SELECT * FROMテーブルで行(または必要に応じて行)を取得し、使用しているスクリプト/プログラミング言語を使用して平均を計算することです。

0

私はこの

select (isnull(col1,0)+isnull(col2,0)+...+isnull(col50,0))/50 as averageval 
from table 

のようにそれを行うだろうが、あなたのテーブルの設計が間違っていることは明らかです。これらの値を含む値テーブルが必要です。あなたが列をリストする必要がありますいくつかの点で

maintable 
---------- 
id int 

valuetable 
---------- 
mainkey int -- foreign key to maintable.id 
valuenum int -- may not be needed goes from 1 to 50 
value int 
0

これは正しい設計がどのように見えるかです。 Sqlは、通知されるまで計算にどの列を含めるかを知らないでしょう。
計算が「単回」の場合は、計算された列をテーブルに配置して、SQLによって維持される計算を保持することを検討してください。

関連する問題