例如,我有一个名为Product的表,其中包含以下数据:
| 产品标识|p_名称|p_类别|
| - ------|- ------|- ------|
| 1个|衬衫|零|
| 第二章|零|零|
| 三个|盖|零|
假设我不知道表中的行数和列数,也不知道哪些列完全为空(所有行中没有非空值),如何编写一个查询来检索行中至少有一个非空值的列,我的方法如下,但没有得到正确的输出:
select
column_name
into #TempColumns
from information_schema.columns
where
table_name = 'Product'
and table_schema = 'DDB'
declare @CurrentColumn nvarchar(max) = '', @IsNull bit, @NonNullCols nvarchar(max) = ''
declare Cur cursor for
select column_name from #TempColumns
open Cur
while 1=1
begin
fetch next from Cur into @CurrentColumn
select @IsNull = case when count(@CurrentColumn) > 0 then 0 else 1 end
from Product
if @IsNull = 1
begin
set @NonNullCols = @NonNullCols + ',' + @CurrentColumn
end
if @@fetch_status <> 0 break
end
close Cur
deallocate Cur
select @NonNullCols as NullColumns
drop table #TempColumns
如果有任何其他的方法或更正我以上(T-SQL)查询。提前感谢。
首先,我创建了一个临时表来存储Product表中所有可用的列名,然后我在这个临时表中循环,提取每一行,并使用计数在product表中检查该列是否完全为空()函数。如果列完全为空,则条件将位变量设置为1,然后将该特定列名存储在另一个变量中,然后检索该变量作为空列。
1条答案
按热度按时间czq61nw11#
下面是一个概念示例。
它使用SQL Server XML和XQuery功能,而不使用动态SQL和游标/循环。
算法非常简单,当我们把每一行转换成XML时,XML中缺少包含NULL值的列。
SQL语言
产出
| 非空列|
| - ------|
| 城市|
| 客户端ID|
| 客户端名称|