私は次のようなクエリを持っています
select *
from tableName
where x='3'
これにより、いくつかの結果が返されますが、すべての行が Null である列は表示したくありません。それらを除外する簡単な方法はありますか?
私は次のようなクエリを持っています
select *
from tableName
where x='3'
これにより、いくつかの結果が返されますが、すべての行が Null である列は表示したくありません。それらを除外する簡単な方法はありますか?
いいえ、ありません。
あなたが求めているのは、次のような構文です
select <column list::filter(where all rows are NULL)>
しかし、それだけでは意味がありません。一般的な意味ではありません。SSMS や 1 回限りのクエリ ツールで使用するとクールに見えるかもしれませんが、Joe Public が ASP.Net などのプログラムで日常的に使用する場合、予測できない数の列が必要になるでしょうか?
本当にやりたい場合は、動的 SQL で実現できますが、この方法でクエリを実行するには、ONCE-PER-TABLE でコーディングする必要があります。
動的 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)