【问题标题】:sql query to exclude not null columnssql查询排除非空列
【发布时间】:2021-11-28 08:56:25
【问题描述】:

我有下表和记录

create table emp_details(empno int primary key,enname varchar(22),sal int,comm int);
insert into emp_details values(1,'ram',4500,200);
insert into emp_details(empno,enname) values(2,'kumar');
insert into emp_details(empno)values(3);

现在我不想在除主键列之外的列中显示具有空值的行。

Excepted output

Empno     Ename         Sal   Comm
1         ram           4500  200
2         kumar 

  

我使用下面的查询来得到上面的结果。

select * from emp_details where empno  not in(select empno from emp_details
where enname is  null and sal is  null and comm is  null)

但是我的原始表有 72 列,我如何检查所有列以获得以上结果。

/

【问题讨论】:

  • 您是否试图找到一种方法来确定所有 72 列都为 NULL 但不输入所有 72 列名称?
  • 我想知道为什么你有一个表,其中所有 71 列都定义为 NULLable(不包括 PK,这不算数)。

标签: sql sql-server sql-server-2012 null


【解决方案1】:

您可以通过这种方式检查CONCAT 的长度(但它对空字符串和NULL 的处理方式相同):

SELECT * FROM dbo.emp_details
  WHERE LEN(CONCAT(Sal,Comm,...70 more columns)) > 0;

您可以使用动态 SQL 构建 CONCAT 列表:

DECLARE @sql nvarchar(max), @cols nvarchar(max);

SELECT @cols = STUFF((SELECT N',' + name FROM sys.columns
  WHERE [object_id] = OBJECT_ID(N'dbo.emp_details')
    AND name NOT IN (N'empno', N'enname')
    ORDER BY column_id
  FOR XML PATH, TYPE).value(N'.[1]',N'nvarchar(max)'),1,1,N'');
  
SET @sql = N'SELECT empno, enname, ' + @cols
  + ' FROM dbo.emp_details WHERE LEN(CONCAT(' + @cols + ')) > 0;';
  
EXEC sys.sp_executesql @sql;

【讨论】:

    猜你喜欢
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 2010-10-08
    相关资源
    最近更新 更多