2017-07-30 5 views
1

レコードフィールドに値がある回数を数えようとしているので、後でアプリケーションでその数を報告できます。レコード内のNOT NULLフィールドの出現をカウントするにはどうすればいいですか

私はCOUNTとGROUP BYを使用してさまざまなアプローチでいくつかの回答を見出していますが、結果はすべてテーブル全体の合計発生の合計です。

私は各レコードにカウントを制限しようとしています。

Table Example: 
COL-1  COL-2  COL-3  COL-4 
VALUE    VALUE 
      VALUE    VALUE 
VALUE    VALUE  VALUE 
VALUE 

私は値が表示された回数のために、各レコードのフィールドをカウントする必要があります。

に似た何か:

Result Concept: 
COL-1  COL-2  COL-3  COL-4  Occurrences 
VALUE    VALUE     2 
      VALUE    VALUE   2 
VALUE    VALUE  VALUE   3 
VALUE          1 

明確化: 私は実際に結果の列と値をリストする必要はありません。私は各レコードの正確なカウントが必要です。 私は、「出現値」と私の質問のレコード値との関係を説明したかっただけです。

ご意見ありがとうございます。

+0

をリストせず、動的SQLを使用することができますか?カウントは、小さなトリックを適用する必要があるものを行うために、列ではなく行で行われます。あなたは合計したい数値か、現在の値だけが存在している場合、それは発生していることを意味しますか? –

+0

もう1つの質問ですが、最終的な値は出現の合計か出現のリストですか? –

+0

カラムを行にピボットさせると、それらのカラムに対して通常の 'count'を使うことができます。 –

答えて

1

だけcaseを使用します。

select t.*, 
     ((case when col1 is not null then 1 else 0 end) + 
     (case when col2 is not null then 1 else 0 end) + 
     (case when col3 is not null then 1 else 0 end) + 
     (case when col4 is not null then 1 else 0 end) 
     ) as occurrences 
from t; 
+0

パーフェクト!ありがとうございました!! 今、私は、その価値をその記録にどのように関連付けるのかがわかりません。 ストアドプロシージャ内で、そのオカレンス値を持つ別のテーブルの「total-count」フィールドを更新しようとしています。 カーソルがプロシージャで値を使用できるようにする必要があるようですが、この場合も、プライマリおよび外部キーを正しく整列させる方法については固執しています。 提案に感謝します。 – LearnsWhileDoing

+0

@ LearnsWhileDoing。 。 。私は別の質問をして、あなたが*テーブルを更新したいと明言することをお勧めします。これは、クエリとして結果を返すことについてかなり明確です。 –

0

またはデコード;)

select t.*, DECODE(col1,null,0,1)+DECODE(col2,null,0,1)+ 
      DECODE(col3,null,0,1)+DECODE(col4,null,0,1) cnt 
from my_table t 
0

あなたはすべての列名の略でどんな値

DECLARE @sql VARCHAR(MAX) 
DECLARE @tbl VARCHAR(100) 

SET @tbl = 'sampletable' -- put your table name here 

SET @sql = 'SELECT *, ' 

SELECT @sql = @sql + '(CASE WHEN ' + cols.name + ' IS NOT NULL THEN 1 ELSE 0 END) ' + '+' 
    FROM sys.columns cols 
WHERE cols.object_id = object_id(@tbl); 

SET @sql = LEFT(@sql, LEN(@sql) - 1) 
SET @sql = @sql + ' AS occurrences FROM ' + @tbl 

EXEC(@sql) 
関連する問題