问一个分组的有关问题

问一个分组的问题销售表A,有字段sale_date, employee_id,client_id,product_id,内容如下20100302 001C1 P1

问一个分组的问题
销售表A,有字段sale_date, employee_id,client_id,product_id,内容如下

20100302 001 C1 P1
20100302 001 C1 P2
20100302 002 C1 P1
20100302 002 C2 P1
20100302 002 C2 P2
20100302 003 C1 P1

现在需要把一天中,一个销售人员对一个客户卖出两种以上货物的纪录打印出来,如何实现?结果如下:
20100302 001 C1 P1
20100302 001 C1 P2
20100302 002 C2 P1
20100302 002 C2 P2


[解决办法]
select * from (
select sale_date,
employee_id,
client_id,
product_id,
count(1) over(partition by sale_date, employee_id, client_id) as cn
from a) where cn>1
前提是一个人卖一个客户一个产品两件的话,在库里存储要有数量
[解决办法]

SQL code
with tmp as (select to_date('20100302','yyyymmdd') sale_date, '001' employee_id, 'C1' client_id, 'P1' product_id from dualunion allselect to_date('20100302','yyyymmdd') sale_date, '001' employee_id, 'C1' client_id, 'P2' product_id from dualunion allselect to_date('20100302','yyyymmdd') sale_date, '002' employee_id, 'C1' client_id, 'P1' product_id from dualunion allselect to_date('20100302','yyyymmdd') sale_date, '002' employee_id, 'C2' client_id, 'P1' product_id from dualunion allselect to_date('20100302','yyyymmdd') sale_date, '002' employee_id, 'C2' client_id, 'P2' product_id from dualunion allselect to_date('20100302','yyyymmdd') sale_date, '002' employee_id, 'C1' client_id, 'P1' product_id from dual) select mt.sale_date,mt.employee_id,mt.client_id,mt.product_idfrom tmp mt,(select sale_date,employee_id,client_id,count(distinct product_id)from tmpgroup by sale_date,employee_id,client_idhaving count(distinct product_id) > 1) stwhere mt.sale_date = st.sale_dateand mt.employee_id = st.employee_idand mt.client_id = st.client_id;
[解决办法]
select *
from A
where (sale_date, employee_id,client_id) in
(select sale_date, employee_id,client_id
from A
group by sale_date, employee_id,client_id
having count(*)>1)
[解决办法]
分区查?over是什么意思?

不懂,帮顶 我也想知道如何弄...
[解决办法]
1.2.3楼都对!
但是1楼好!效率要高些!
[解决办法]
SQL code
create table a(sale_date date,employee_id char(4),client_id char(4),product_id char(4));insert into a(sale_date,employee_id,client_id, product_id) values(to_date('20100302','yyyymmdd'), '001', 'C1', 'P1');insert into a(sale_date,employee_id,client_id, product_id) values(to_date('20100302','yyyymmdd'), '001', 'C1', 'P2');insert into a(sale_date,employee_id,client_id, product_id) values(to_date('20100302','yyyymmdd'), '002', 'C1', 'P1');insert into a(sale_date,employee_id,client_id, product_id) values(to_date('20100302','yyyymmdd'), '002', 'C2', 'P1');insert into a(sale_date,employee_id,client_id, product_id) values(to_date('20100302','yyyymmdd'), '002', 'C2', 'P2');insert into a(sale_date,employee_id,client_id, product_id) values(to_date('20100302','yyyymmdd'), '002', 'C1', 'P1');SELECT to_char(a1.sale_date,'yyyymmdd'), a1.employee_id, a1.client_id, a1.product_id, count(a1.product_id) product_countFROM a a1GROUP BY to_char(a1.sale_date,'yyyymmdd'), a1.employee_id, a1.client_id, a1.product_idHAVING COUNT(a1.product_id)>=2;
[解决办法]
SQL code
SQL> edi已写入 file afiedt.buf  1  select to_char(sale_date,'yyyymmdd') sale_date,employee_id,client_id,product_id from  2  tb a where exists(select 1 from tb where employee_id=a.employee_id and client_id=a.client_id  3  group by employee_id,client_id  4* having count(1)>=2)SQL> /SALE_DAT EMPLO CLIEN PRODU-------- ----- ----- -----20100302 001   c1    p120100302 001   c1    p220100302 002   c2    p120100302 002   c2    p2 


[解决办法]

SQL code
CREATE TABLE a(sale_date   DATE,employee_id CHAR(4),client_id   CHAR(4),product_id  CHAR(4));INSERT INTO a(sale_date,employee_id,client_id, product_id) VALUES(to_date('20100302','yyyymmdd'), '001', 'C1', 'P1');INSERT INTO a(sale_date,employee_id,client_id, product_id) VALUES(to_date('20100302','yyyymmdd'), '001', 'C1', 'P2');INSERT INTO a(sale_date,employee_id,client_id, product_id) VALUES(to_date('20100302','yyyymmdd'), '002', 'C1', 'P1');INSERT INTO a(sale_date,employee_id,client_id, product_id) VALUES(to_date('20100302','yyyymmdd'), '002', 'C2', 'P1');INSERT INTO a(sale_date,employee_id,client_id, product_id) VALUES(to_date('20100302','yyyymmdd'), '002', 'C2', 'P2');INSERT INTO a(sale_date,employee_id,client_id, product_id) VALUES(to_date('20100302','yyyymmdd'), '002', 'C1', 'P1');SELECT to_char(a1.sale_date,'yyyymmdd'), a1.employee_id, a1.client_id, a1.product_idFROM a a1WHERE EXISTS (SELECT to_char(a2.sale_date,'yyyymmdd'), a2.employee_id, a2.client_id              FROM a a2          WHERE to_char(a2.sale_date,'yyyymmdd')=to_char(a1.sale_date,'yyyymmdd')          AND  a2.employee_id= a1.employee_id          AND a2.client_id=a1.client_id          GROUP BY to_char(a2.sale_date,'yyyymmdd'), a2.employee_id, a2.client_id          HAVING COUNT(DISTINCT a2.product_id)>=2 );
[解决办法]
SQL code
CREATE TABLE a( 
sale_date  DATE,
employee_id CHAR(4),
client_id  CHAR(4),
product_id  CHAR(4)
);

INSERT INTO a(sale_date,employee_id,client_id, product_id) VALUES(to_date('20100302','yyyymmdd'), '001', 'C1', 'P1');
INSERT INTO a(sale_date,employee_id,client_id, product_id) VALUES(to_date('20100302','yyyymmdd'), '001', 'C1', 'P2');
INSERT INTO a(sale_date,employee_id,client_id, product_id) VALUES(to_date('20100302','yyyymmdd'), '002', 'C1', 'P1');
INSERT INTO a(sale_date,employee_id,client_id, product_id) VALUES(to_date('20100302','yyyymmdd'), '002', 'C2', 'P1');
INSERT INTO a(sale_date,employee_id,client_id, product_id) VALUES(to_date('20100302','yyyymmdd'), '002', 'C2', 'P2');
INSERT INTO a(sale_date,employee_id,client_id, product_id) VALUES(to_date('20100302','yyyymmdd'), '002', 'C1', 'P1');

SELECT to_char(a1.sale_date,'yyyymmdd'), a1.employee_id, a1.client_id, a1.product_id
FROM a a1
WHERE EXISTS (SELECT 1
      FROM a a2
    WHERE to_char(a2.sale_date,'yyyymmdd')=to_char(a1.sale_date,'yyyymmdd')
    AND  a2.employee_id= a1.employee_id
    AND a2.client_id=a1.client_id
    GROUP BY to_char(a2.sale_date,'yyyymmdd'), a2.employee_id, a2.client_id
    HAVING COUNT(DISTINCT a2.product_id)>=2 );


-- 我是来蹭分的!
[解决办法]
-- 请注意:两种以上货物

-- 是“两种”,而不是“两件”!
[解决办法]
select sale_date, employee_id,client_id,product_id from A where exists (
select * from A as B where B.sale_date=A.sale_date and
B.employee_id=A.employee_id and B.client_id=A.client_id and
B.product_id<>A.product_id
)
[解决办法]
1L的正点
[解决办法]
接分ing


[解决办法]

SQL code
--练习一下--1.with tt as (  select date'2010-03-02' sale_date, '001' employee_id, 'C1' client_id, 'P1' product_id from dual union all  select date'2010-03-02' sale_date, '001' employee_id, 'C1' client_id, 'P2' product_id from dual union all  select date'2010-03-02' sale_date, '002' employee_id, 'C1' client_id, 'P1' product_id from dual union all  select date'2010-03-02' sale_date, '002' employee_id, 'C2' client_id, 'P1' product_id from dual union all  select date'2010-03-02' sale_date, '002' employee_id, 'C2' client_id, 'P2' product_id from dual union all  select date'2010-03-02' sale_date, '002' employee_id, 'C1' client_id, 'P1' product_id from dual  ) SELECT sale_date, employee_id, client_id, product_id  FROM (SELECT a.*, COUNT(1) over(PARTITION BY sale_date, employee_id, client_id) cn          FROM (SELECT DISTINCT sale_date, employee_id, client_id, product_id FROM tt) a) WHERE cn > 1;--2.with tt as (  select date'2010-03-02' sale_date, '001' employee_id, 'C1' client_id, 'P1' product_id from dual union all  select date'2010-03-02' sale_date, '001' employee_id, 'C1' client_id, 'P2' product_id from dual union all  select date'2010-03-02' sale_date, '002' employee_id, 'C1' client_id, 'P1' product_id from dual union all  select date'2010-03-02' sale_date, '002' employee_id, 'C2' client_id, 'P1' product_id from dual union all  select date'2010-03-02' sale_date, '002' employee_id, 'C2' client_id, 'P2' product_id from dual union all  select date'2010-03-02' sale_date, '002' employee_id, 'C1' client_id, 'P1' product_id from dual  ) SELECT a.*  FROM tt a,       (SELECT sale_date, employee_id, client_id          FROM (SELECT DISTINCT sale_date, employee_id, client_id, product_id FROM tt)         GROUP BY sale_date, employee_id, client_id        HAVING COUNT(1) > 1) b WHERE a.sale_date = b.sale_date AND       a.employee_id = b.employee_id AND       a.client_id = b.client_id;
[解决办法]
SQL code
select sale_date, employee_id,client_id,product_id,from tb awhere exists   (select 1 from tb b where b.employee_id = a.employee_id     and a.client_id = b.client_id     group by sale_date,employee_id     having count(1)>=2);
[解决办法]
看了下,楼主是说2种,不是2件。

所以having count(1) 这种写法是不对的,

having count(disintct product_id) 这种写法才对。