2017-03-13 4 views
0

こんにちは役立つスタックオーバーフローコミュニティ - 私は、私が取り組んでいるこのクエリを把握しようといくつかの問題を抱えています。それは単純に思えるかもしれませんが、うまくいけばそれはありますが、私はちょうど今学んでいます。私のクエリは、どの顧客に注文がないのかを示すリストを提示することになっていますか?営業部門がこれらの顧客にフォローアップできるよう連絡先情報を含めてください。どんな助けもありがとうございます。売り上げがないことを示すSQLクエリレポート

select c.CustomerID 'Customer ID', c.CompanyName 'Company Name', 
c.ContactName 'Contact Name', c.Address, c.City, 
c.StateOrRegion 'State Or Region', c.PostalCode 'Postal Code', 
c.Country, c.Phone, c.Fax, o.OrderID 'Order ID', 
o.ShippedDate 'Shipped Date' 
from orders o 
left join Customers c 
on o.customerid = c.customerid 
where o.shippeddate is not null 
order by c.ContactTitle asc 

もう一度お時間をいただきありがとうございます。

+0

互換性のないデータベースタグを削除しました。実際に使用しているデータベースにタグを付けてください。 – Siyual

+0

'left join'の代わりに' right join'を実行し、 'o.shippeddate is null 'に' o.shippeddate is not null'を変更すると、あなたは現在のロジックになります。アイテムが出荷されたすべてのオーダーおよび関連顧客を返します。あなたが望むのは、商品が出荷されていないすべての顧客を返すことです。 – xQbert

答えて

0

私は単にnot existsを使用します。

select c.* 
from customers c 
where not exists (select 1 
        from orders o 
        where o.customerid = c.customerid 
       ) 
order by c.ContactTitle asc; 

また、あなたが列の別名のための単一引用符を使用しないでください。文字列と日付の定数にのみ使用してください。

存在しない注文については、注文情報を含める必要はありません。私はselect *をちょうどあなたが望むかもしれない列を列挙するのではなく、省略形として使用しました。

+0

@Gordon LinoffとSqlZimを助けて教育する - ありがとう! –

1

is not nullは、を持たないcustomersを見つけるにはis nullでなければなりません。

また、left joinright joinに変更しても、is not nullからis nullに変更することができます。

select c.CustomerID 'Customer ID', c.CompanyName 'Company Name', 
    c.ContactName 'Contact Name', c.Address, c.City, 
    c.StateOrRegion 'State Or Region', c.PostalCode 'Postal Code', 
    c.Country, c.Phone, c.Fax, o.OrderID 'Order ID', 
    o.ShippedDate 'Shipped Date' 
from Customers c 
    left join orders o 
    on o.customerid = c.customerid 
where o.shippeddate is null 
order by c.ContactTitle asc