簡體   English   中英

SQL查詢以評估多行

[英]SQL Query to evaluate multiple rows

我只想從訂單表中檢索已支付所有訂單的客戶。 (付費=“ 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)。

如何構造查詢以評估客戶的所有訂單,並僅返回已支付所有訂單的客戶的信息?

從另一角度看問題,您只需要沒有未付訂單的客戶。

sel cus from order group by Cus having min(Paid) = 'Y';

上面的查詢還利用了“ Y”>“ N”的事實。

SQL提琴:

http://sqlfiddle.com/#!4/f6022/1

如果需要為符合條件的客戶選擇所有不同的訂單,則可以使用OLAP功能:

select cus,order,paid from (select cus,order,paid,min(paid) 
                over (partition by cus)minz from order)dt where minz='Y';

不了解Oracle,但經常在SQL Server中工作,我會寫這樣的查詢

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

基本上,您檢索總訂單數等於總訂單或已付款訂單的客戶。

同樣,對未提供正確的Oracle語法表示歉意,但希望它將為您指明正確的方向。

使用Oracle,您也可以select customer from your_table where paid='Y' minus select customer from your_table where paid='N' ,盡管我不知道這樣做是否更快,當然,您也不會在這種情況下,其他字段。

SELECT  *
FROM    orders oo
WHERE   NOT EXISTS
        (
            SELECT  1
            FROM    orders io
            WHERE   oo.cus# = io.cus#
            AND     io.paid = 'N'
        )
;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM