首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较ColumnName查找的Case表达式存在且ColumnName不是null

比较ColumnName查找的Case表达式存在且ColumnName不是null
EN

Stack Overflow用户
提问于 2019-12-12 20:35:58
回答 2查看 69关注 0票数 0

我正在尝试创建一个case表达式,该表达式查找表中的所有列,其ColumnName为‘%45-’,ColumnName为'45-‘为非空。

代码语言:javascript
复制
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 

但是,我得到了一个错误:

子查询返回的值超过一个。当子查询跟随=、!=、<、<=、>、>=或子查询用作表达式时,这是不允许的。

有什么办法让这件事起作用吗?

==============================================================

添加表以供输出参考

代码语言:javascript
复制
name    45-AB    72    36    NewColumn
Dan     null     null  null  0
Steve   1        null  null  1
EN

回答 2

Stack Overflow用户

发布于 2019-12-12 20:39:46

只要

代码语言:javascript
复制
SELECT [name] 
    FROM tempdb.sys.columns
    WHERE [object_id] = OBJECT_ID(N'tempdb..#temp') and [name] like '45-%'

返回多个它无法工作的值。对于子查询,如果将其结果与值(为null或等于)进行比较,则必须返回一个值。

试试这个:

代码语言:javascript
复制
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 
票数 1
EN

Stack Overflow用户

发布于 2019-12-12 23:49:26

下面的代码将生成(如果取消注释EXEC行) sql代码,它将返回表的字段名,如果列包含至少一个非空值,则返回一个1;如果字段中的所有值为空,则为0。

您可以在下面的代码中添加像'45-%‘这样的where列名,这样它只会计算/返回这些字段。

代码语言:javascript
复制
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; 

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59312329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档