根据您的描述和评论,听起来您只想在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
。