1

私は次のようなクエリを持っています

select *
from tableName
where x='3'

これにより、いくつかの結果が返されますが、すべての行が Null である列は表示したくありません。それらを除外する簡単な方法はありますか?

4

2 に答える 2

5

いいえ、ありません。

あなたが求めているのは、次のような構文です

select <column list::filter(where all rows are NULL)>

しかし、それだけでは意味がありません。一般的な意味ではありません。SSMS や 1 回限りのクエリ ツールで使用するとクールに見えるかもしれませんが、Joe Public が ASP.Net などのプログラムで日常的に使用する場合、予測できない数の列が必要になるでしょうか?

本当にやりたい場合は、動的 SQL で実現できますが、この方法でクエリを実行するには、ONCE-PER-TABLE でコーディングする必要があります。

于 2013-04-22T21:43:42.000 に答える
2

動的 SQL でクレイジーなことを試すこともできますが、これはお勧めしません。

このクエリは、最初の 2 つの列がすべて null 値であるかどうかを確認し、それらを select ステートメントに追加します。本当にこの方法を使用したい場合は、テーブル内のすべての列に対して同じことができます。

DECLARE @sql nvarchar(1000)
DECLARE @columnList nvarchar(1000)
SET @columnList = ''

DECLARE @tableRowCount int
DECLARE @columnRowCount int

SET @tableRowCount = (select COUNT(*) from tableName)

SET @columnRowCount = (select COUNT(*) from tableName where column1 is null)
IF @tableRowCount <> @columnRowCount 
    SET @columnList = @columnList + 'column1, '

SET @columnRowCount = (select COUNT(*) from tableName where column2 is null)
IF @tableRowCount <> @columnRowCount 
    SET @columnList = @columnList + 'column2, '


IF LEN(@columnList) > 0
    SET @sql = 'SELECT ' + SUBSTRING(@columnList,1, LEN(@columnList) - 1) + ' FROM tableName'
ELSE
    SET @sql = 'SELECT * FROM tableName'

EXEC(@sql)
于 2013-04-23T09:24:03.347 に答える