Address 3
説明とコメントに基づくと、値が含まれている場合にのみ列を表示したいようです。
すべての顧客を表示する方法はありませんが、値がない場合は列を非表示にします。少なくとも1つのクエリではこれを行うことはできません。
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フィドルを参照):
select id,
name,
address1,
address2
from yourtable
フィールドに値がないレコードを含む、テーブル内のすべてのデータを返しAddress2
ます。
空のレコードを表示したくない場合は、レコードAddress2
が失われますが、これはあなたが望むものではありません。(デモ付きのSQLフィドルを参照):
select id,
name,
address1,
address2
from yourtable
where address2 is not null
or address2 <> ''
選択リストの列を非表示にする方法はありません。値を選択しない場合にのみ非表示にできます。
したがって、2つの選択を実行できますが、これらは同じデータセットにはありません。次を使用できます。
select id,
name,
address1,
address2
from yourtable
where Address3 is not null
or Address3 <> '';
次に、空のレコードを選択するための2番目のクエリAddress3
:
select id,
name,
address1
from yourtable
where Address3 is null
or Address3 = '';
これを行うことを提案する他の唯一の方法は、CASE
ステートメントを使用して、次のような1つのアドレス文字列を作成することです。
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
、すべてのアドレス列を1つの文字列に連結します。に値がない場合は、とをAddress 3
連結するだけです。Address 1
Address 2