[英]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.