0

これは私の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列を表示する必要があります...空の列を表示したくない

4

1 に答える 1

3

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 1Address 2

于 2013-01-02T12:05:06.543 に答える