Sql 存在比较ColumnName查找的大小写表达式,ColumnName不为null
我正在尝试创建一个case表达式,用于查找表中列名为“%45-%”且列名为“45-%”的所有列,其中列名不为nullSql 存在比较ColumnName查找的大小写表达式,ColumnName不为null,sql,sql-server,Sql,Sql Server,我正在尝试创建一个case表达式,用于查找表中列名为“%45-%”且列名为“45-%”的所有列,其中列名不为null SELECT *, CASE WHEN (SELECT [name] FROM tempdb.sys.columns WHERE [object_id] = Object_id(N'tempdb..#temp') AND [nam
SELECT *,
CASE
WHEN (SELECT [name]
FROM tempdb.sys.columns
WHERE [object_id] = Object_id(N'tempdb..#temp')
AND [name] LIKE '45-%') IS NOT NULL THEN 1
ELSE 0
END AS x
FROM #temp
但是,我得到了一个错误:
子查询返回了多个值。这是不允许的,因为
子查询后面是=,!=,=或者当子查询用作
表情
你有什么办法让它工作吗
==============================================================
为输出参考添加表
name 45-AB 72 36 NewColumn
Dan null null null 0
Steve 1 null null 1
只要
SELECT [name]
FROM tempdb.sys.columns
WHERE [object_id] = OBJECT_ID(N'tempdb..#temp') and [name] like '45-%'
返回多个值,但该值无效。
对于子查询,如果将其结果与一个值(null或相等)进行比较,则必须返回一个值
试试这个:
SELECT *,
CASE
WHEN exists(SELECT [name]
FROM tempdb.sys.columns
WHERE [object_id] = Object_id(N'tempdb..#temp')
AND [name] LIKE '45-%') THEN 1
ELSE 0
END AS x
FROM #temp
以下代码将生成(并在取消注释EXEC行时执行)sql代码,该代码将返回表的字段名,如果列至少包含1个非空值,则返回1;如果字段中的所有值都为空,则返回0 您可以将where columnname(如“45-%”)添加到下面的代码中,这样它将只计算/返回这些字段
select 1 as '45-1', 2 as '45-2', null as '45-3', 4 as '45-4' into #temp
DECLARE @tb nvarchar(512) = N'tempdb..#temp';
DECLARE @sql nvarchar(max) = N''
SELECT @sql += 'select ''' + QUOTENAME(name) + ''' as ColumnName, case when (select top 1 ''Not Null'' from tempdb..#temp where ' + QUOTENAME(name) + ' is not null ) = ''Not Null'' Then 1 else 0 end as IsColumnNull
Union '
FROM tempdb.sys.columns
WHERE [object_id] = OBJECT_ID(@tb);
set @sql = left(@sql,len(@sql) - 5)
select @sql
--EXEC sys.sp_executesql @sql;
您正在使用哪些dbms?请改为加入。您将如何加入?我正在使用SQL Server.Ok。有没有“循环”的方法?此外,对每个值进行比较,其中的值如“45-%”问题是我正在使用动态sql创建列。因此,我不知道有多少列标题具有条件值。在RDBMS中,任何形式的循环(几乎)都是一个坏主意,@dcrowley01。RDBMS在集合中工作,程序以迭代方式工作。更新:该解决方案将始终返回1,因为列始终存在,但我需要知道它们何时存在,如果它们有值或为null。如果结果为null,则不会将其视为“存在”,因此else pat将被激活。对于列x中的所有行,上面的表达式将返回1,我认为,因为45%列将始终存在。当45%在行中为空时,x应该等于0。嗨,胡安,这看起来非常接近,或者我没有编辑它来完成我的任务。我对动态sql没有太多经验。虽然从中返回的是一列标题列,然后是一列是否为空。我正在尝试水平返回带有列名的表,并添加一列,查看该值是否为null。这有意义吗?为了清晰起见,增加了上表