如何使用NEW QUERY忽略SQL Server中的空列
样本表:
表名:项目
Name item1 item2 item3 item4 item5
------------------------------------------------------
Adan pen ball eraser paper bag
Bea pen
Cathy ball eraser
Dan paper
Eva pen eraser
情景:
我想选择Name
并忽略空列。
SAMPLE1:我选择Name=Dan
结果:
Name item4
------------
Dan paper
SAMPLE2:我想选择Name=Eva
结果:
Name item1 item3
--------------------
Eva pen eraser
SAMPLE3:我想选择Name=Cathy
结果:
Name item2 item3
------------------------
Cathy ball eraser
SAMPLE4:我想选择Name=Adan
结果:
Name item1 item2 item3 item4 item5
------------------------------------------------------
Adan pen ball eraser paper bag
答案 0 :(得分:0)
正如评论中所提到的,以不同的方式设计数据库可能会更好,具体取决于您将来需要做些什么。
但是,您可以动态创建SQL查询以获取您正在查找的输出。我正在创建一个临时表#T来模拟你的示例表。
-- create sample table
create table #T (Name varchar(50), Item1 varchar(50), Item2 varchar(50), Item3 varchar(50), Item4 varchar(50), Item5 varchar(50));
insert #T values('Adan', 'pen', 'ball', 'eraser', 'paper', 'bag');
insert #T values('Bea', 'pen', '', '', '', '');
insert #T values('Cathy', '', 'ball', 'eraser', '', '');
insert #T values('Dan', '', '', '', 'paper', '');
insert #T values('Eva', 'pen', '', 'eraser', '', '');
-- query parameter
declare @Name varchar(50);
set @Name = 'dan';
-- create dynamic query
declare @sql varchar(MAX);
set @sql = 'select Name, ';
select
@sql = @sql +
(case when isnull(Item1, '') <> '' then 'Item1, ' else '' end) +
(case when isnull(Item2, '') <> '' then 'Item2, ' else '' end) +
(case when isnull(Item3, '') <> '' then 'Item3, ' else '' end) +
(case when isnull(Item4, '') <> '' then 'Item4, ' else '' end) +
(case when isnull(Item5, '') <> '' then 'Item5, ' else '' end)
from #T
where Name = @Name;
set @sql = left(@sql, len(@sql)-1) + ' from #T where Name = ''' + @Name + ''';';
-- run dynamic query
exec (@sql)