1

如何使用 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
4

1 回答 1

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)
于 2012-12-12T19:24:21.877 回答