0

すべての注文に対して支払いを行った顧客のみを注文テーブルから取得したいと考えています。(有料 = 'Y')。

注文表は次のようになります。

Cus #     Order #    Paid 
111            1        Y 
111            2        Y
222            3        Y
222            4        N
333            5        N

この例では、クエリは顧客 111 のみを返す必要があります。

クエリ

Select * from order where Paid = 'Y';

すべての注文の支払いを完了した顧客 (顧客 111) に加えて、支払い済および未払いの注文がある顧客 (例: 顧客 222) を返します。

顧客のすべての注文を評価し、すべての注文の支払いを済ませた顧客の情報のみを返すようにクエリを構成するにはどうすればよいですか?

4

4 に答える 4

0

Oracle はわかりませんが、SQL Server で作業することが多いので、次のようなクエリを書きます。

Select Cus from order group by Cus having count(*) = sum(case when Paid = ‘Y’ then 1 else 0);

基本的に、合計注文数が合計または支払済注文と等しい顧客を取得します。

繰り返しますが、適切な Oracle 構文を提供していないことをお詫びしますが、それが正しい方向を示してくれることを願っています。

于 2013-06-21T22:10:40.327 に答える
-1
SELECT  *
FROM    orders oo
WHERE   NOT EXISTS
        (
            SELECT  1
            FROM    orders io
            WHERE   oo.cus# = io.cus#
            AND     io.paid = 'N'
        )
;
于 2013-06-22T10:11:48.343 に答える