Oracle - 使用子查询

时间:2015-02-19 19:29:46

标签: oracle oracle9i

我正在尝试撰写一份Select语句,该语句将审核销售给我们客户的商品。我希望看到所有在同一天内进行多次购买的客户以及与之相关的销售数字。

这是我目前的结构:

表:销售

字段:SalesNum,customer,SaleDt

测试数据

Customer  -  SalesNum  -  SaleDt  
---------------------------------
Mike    -     1        -   1/1/15
Bob     -     2        -   1/1/15
Mike    -     3        -   1/1/15
Tom     -     4        -   1/2/15
Tom     -     5        -   1/2/15

期望的结果

Customer  -  SalesNum  -  SaleDt 
---------------------------------
Mike    -     1        -   1/1/15
Mike    -     3        -   1/1/15
Tom     -     4        -   1/2/15
Tom     -     5        -   1/2/15

我很欣赏有关使用方法的任何见解和建议。

2 个答案:

答案 0 :(得分:0)

似乎不够清楚,我会说

从Sales中选择Customer,SalesNum,SaleDt,其中SaleDt = sysdate客户订单;

将根据您的解释列出客户订购的今日销售情况,这是结果,但是它是什么?

答案 1 :(得分:0)

使用您的样本数据:

with sales (Customer , SalesNum , SaleDt) as (  
select 'Mike' , 1 , '1/1/15' from dual union all
select 'Bob' , 2 , '1/1/15' from dual  union all
select 'Mike' , 3 , '1/1/15' from dual  union all
select 'Tom' , 4 , '1/2/15' from dual  union all
select 'Tom' , 5 , '1/2/15' from dual )

select customer,salesnum,s.saledt,total from sales s inner join (
select saledt,customer,count(*) total from sales
group by saledt,customer) using (customer)
where total>1 and customer = 'Mike'

结果:

CUSTOMER   SALESNUM SALEDT      TOTAL
-------- ---------- ------ ----------
Mike              1 1/1/15          2
Mike              3 1/1/15          2

或者您可能希望使用逗号分隔salesnums,以避免重复:

select customer,saledt,to_char(wm_concat(salesNum)) salesNums,count(*) total 
from sales
group by saledt,customer

结果:

CUSTOMER   SALEDT   SALESNUMS   TOTAL
Bob        1/1/15       2         1
Mike       1/1/15      1,3        2
Tom        1/2/15      4,5        2