2017-10-13 3 views
0

特定のアイテムに対して請求されたクライアントを確認する必要があります。テーブルは、以下のとおりです。クライアント、オーダー、詳細。接続方法は、クライアントから注文、注文から詳細までです。 (client.acctno = order.acctno、order.orderno = details.orderno)3つのテーブルにわたるクエリ結果

どのようにすべての注文を検索し、特定のアイテム(正確なテーブル名の下のサンプルコード)を販売していないものだけを表示することができます。私のデータは、すべてのクライアントを表示し続けます。なぜなら、特定の順序でアイテムを販売していないからです。すべての注文としてそれらをまとめて比較したいと思っています。

SELECT * 
FROM plshared.dbo.client 
LEFT OUTER JOIN PL00.dbo.ordhdr ON ordhdr.ACCT_NO = client.ACCT_NO 
WHERE NOT EXISTS (SELECT * 
        FROM pl00.dbo.orddet 
        WHERE orddet.ORDER_NO = ordhdr.order_no 
        AND orddet.ITEM_NO = '2017WI') 
--GROUP BY client.ACCT_NO 
ORDER BY CLIENT.ACCT_NO 
+0

どのRDBMSがこれに該当しますか? MySQL、PostgreSQL、Oracle、SQL Server、IBM DB2などを使用しているかどうかにかかわらず、多くの場合違いがあります。あなたの質問に関連タグを追加してください! –

+0

SQL Server Mgnt Studio –

+0

それで、あなたの質問に 'sql-server'タグを追加してください... –

答えて

0

問題はご注文のレベルです。

SELECT o.ACCT_NO 
FROM PL00.dbo.ordhdr o JOIN 
    pl00.dbo.orddet od 
    ON od.ORDER_NO = o.order_no 
GROUP BY o.ACCT_NO 
HAVING SUM(CASE WHEN od.ITEM_NO = '2017WI' THEN 1 ELSE 0 END) = 0; 
ORDER BY o.ACCT_NO; 
+0

素晴らしい!魅力のように働いてくれてありがとう。 –

関連する問題