这是我的SQL查询
select C.Name, C.[Name 2] ,
C.Address, C.[Address 2],C.[Address 3],
C.City, C.[Post Code], C.[Contact], CR.Name as country,
SIH.[ARE Gr_Wt],SIH.[Total Boxes] , SIH.[Posting Date] ,
SIH.[Country of Origin of Goods],
CASE when C.[E-Mail] <> '' then 'E-mail: ' + C.[E-Mail] else '' end [E-Mail]
from [Sales Invoice Header] SIH
inner join [Customer] C
on C.No_ = SIH.[Sell-to Customer No_]
inner join [Country_Region] CR
On CR.Code = SIH.[Country of Final Destination]
where SIH.No_ = 'PEXP1213-596'
在此查询中,如果我的地址3字段没有所有客户的值..我只有在有值时才需要显示此地址3列...我不想显示空列
答案 0 :(得分:3)
根据您的说明和评论,听起来您只想在其中包含值时显示Address 3
列。
如果没有值,则无法显示所有客户,但隐藏列,至少在一个查询中,您无法执行此操作。
如果您SELECT
所有字段都要获得Address 3
字段,除非您专门将其过滤掉,但如果您过滤,则无法获得所有数据。
例如,如果您有以下示例数据:
CREATE TABLE yourtable
([id] int, [name] varchar(4), [Address1] varchar(10), [Address2] varchar(4));
INSERT INTO yourtable ([id], [name], [Address1], [Address2])
VALUES
(1, 'Test', '12345 blah', NULL),
(2, 'John', '45 Test', 'test');
如果我使用查询(请参阅SQL Fiddle with Demo):
select id,
name,
address1,
address2
from yourtable
它将返回表格中的所有数据,包括Address2
字段中没有值的记录。
如果我不想显示空Address2
的记录,我将丢失不是您想要的记录。 (见SQL Fiddle with Demo):
select id,
name,
address1,
address2
from yourtable
where address2 is not null
or address2 <> ''
无法隐藏选择列表中的列。您只能通过不选择值来隐藏它。
所以你可以执行两个选择,但这些选择不在同一个数据集中。您可以使用以下内容:
select id,
name,
address1,
address2
from yourtable
where Address3 is not null
or Address3 <> '';
然后第二个查询选择空Address3
的记录:
select id,
name,
address1
from yourtable
where Address3 is null
or Address3 = '';
我建议这样做的另一种方法是使用CASE
语句构建一个类似于此的地址字符串:
select C.Name,
C.[Name 2] ,
case
when C.[Address 3] is not null or C.[Address 3] <> ''
then C.Address +' '+ C.[Address 2] + ' '+ C.[Address 3]
else C.Address +' '+ C.[Address 2] end Address,
C.City,
C.[Post Code],
C.[Contact],
CR.Name as country,
SIH.[ARE Gr_Wt],
SIH.[Total Boxes],
SIH.[Posting Date],
SIH.[Country of Origin of Goods],
CASE when C.[E-Mail] <> '' then 'E-mail: ' + C.[E-Mail] else '' end [E-Mail]
from [Sales Invoice Header] SIH
inner join [Customer] C
on C.No_ = SIH.[Sell-to Customer No_]
inner join [Country_Region] CR
on CR.Code = SIH.[Country of Final Destination]
where SIH.No_ = 'PEXP1213-596'
这将检查Address 3
中是否有值,如果有,则将所有地址列连接成一个字符串。如果Address 3
中没有值,则它只会连接Address 1
和Address 2
。