sql 排除非空列的查询
sql query to exclude not null columns
我有以下table和记录
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)
但是我的原始 table 有 72 列,我如何检查所有列以获得上述结果。
/
您可以通过这种方式检查 CONCAT
的长度(但它对空字符串和 NULL 的处理方式相同):
SELECT * FROM dbo.emp_details
WHERE LEN(CONCAT(Sal,Comm,...70 more columns)) > 0;
您可以构建 CONCAT
动态列表 SQL:
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'./text()[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;
我有以下table和记录
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)
但是我的原始 table 有 72 列,我如何检查所有列以获得上述结果。
/
您可以通过这种方式检查 CONCAT
的长度(但它对空字符串和 NULL 的处理方式相同):
SELECT * FROM dbo.emp_details
WHERE LEN(CONCAT(Sal,Comm,...70 more columns)) > 0;
您可以构建 CONCAT
动态列表 SQL:
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'./text()[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;