求助一条sql语句的写法

[复制链接]
查看11 | 回复9 | 2014-2-18 16:42:02 | 显示全部楼层 |阅读模式
有一个表结构如下table A(id primary key,

no,

colname)

现在我想找出在表A中,相同的no值出现且只出现两次,并且colname值 分别为sales和pur的记录.
比如数据如下:
1 'bill_1''sales'
2 'bill_1''pur'
3 'bill_1''mov'
4 'bill_2''sales'
5 'bill_2''pur'
6 'bill_3''sales'
7 'bill_3''mov'
应该只查出
4 'bill_2''sales'
5 'bill_2''pur'
回复

使用道具 举报

千问 | 2014-2-18 16:42:02 | 显示全部楼层
[php]
SQL> select * from t;
ID NO COLNAME
---------- ---------- ----------
1
a
b
1
a
a
1
a
c
1
b
a
1
b
b
1
c
a
1
c
b
已选择7行。
已用时间:00: 00: 00.01
SQL> select id,no,colname from (select t.*,count(*) over (partition by no) cnt from t) where cnt=2;
ID NO COLNAME
---------- ---------- ----------
1
b
a
1
b
b
1
c
a
1
c
b
已用时间:00: 00: 00.00
SQL>
----------
[/php]
回复

使用道具 举报

千问 | 2014-2-18 16:42:02 | 显示全部楼层
谢谢楼上的
回复

使用道具 举报

千问 | 2014-2-18 16:42:02 | 显示全部楼层
最初由 HuiYi_love 发布
[B][php]
SQL> select id,no,colname from (select t.*,count(*) over (partition by no) cnt from t) where cnt=2;
[/php] [/B]

在2楼的基础上再改进一下
select *
 from (select t.*,count(distinct no,colname) over (partition by no) cnt
    from t
    where colname in ('sales','pur'))
where cnt=2;
回复

使用道具 举报

千问 | 2014-2-18 16:42:02 | 显示全部楼层
最初由 HuiYi_love 发布
[B][php]
SQL> select * from t;
ID NO COLNAME
---------- ---------- ----------
1
a
b
1
a
a
1
a
c
1
b
a
1
b
b
1
c
a
1
c
b
已选择7行。
已用时间:00: 00: 00.01
SQL> select id,no,colname from (select t.*,count(*) over (partition by no) cnt from t) where cnt=2;
ID NO COLNAME
---------- ---------- ----------
1
b
a
1
b
b
1
c
a
1
c
b
已用时间:00: 00: 00.00
SQL>
可能我的表述不是很清楚.
还有个要求没达到,就是colname必须一个是a,另一个是b,
比如要排除
1 d a
1 d c 这 种 情况
[/php] [/B]

回复

使用道具 举报

千问 | 2014-2-18 16:42:02 | 显示全部楼层
在2楼的基础上再改进一下
select *
 from (select t.*,count(distinct no,colname) over (partition by no) cnt
    from t
    where colname in ('sales','pur'))
where cnt=2;

用in('sales','pur'))不行,有可能两个 都是sales或pur
回复

使用道具 举报

千问 | 2014-2-18 16:42:02 | 显示全部楼层
最初由 HuiYi_love 发布
[B][php]
SQL> select * from t;
ID NO COLNAME
---------- ---------- ----------
1
a
b
1
a
a
1
a
c
1
b
a
1
b
b
1
c
a
1
c
b
已选择7行。
已用时间:00: 00: 00.01
SQL> select id,no,colname from (select t.*,count(*) over (partition by no) cnt from t) where cnt=2;
ID NO COLNAME
---------- ---------- ----------
1
b
a
1
b
b
1
c
a
1
c
b
已用时间:00: 00: 00.00
SQL>
----------
[/php] [/B]

这样的结果,好像显得数据有些巧合
偶来一个复杂一些的,呵呵
SQL> select * from table_a
2where colname in('sales','pur')
3and no in(select no
4from table_a
5where colname in('sales','pur')
6group by no
7having count(no)=2);
回复

使用道具 举报

千问 | 2014-2-18 16:42:02 | 显示全部楼层
最初由 akershao 发布
[B]
这样的结果,好像显得数据有些巧合
偶来一个复杂一些的,呵呵
SQL> select * from table_a
2where colname in('sales','pur')
3and no in(select no
4from table_a
5where colname in('sales','pur')
6group by no
7having count(no)=2); [/B]

还是不能排除colname 可能都是"sales"或都是"pur"这种情况,


回复

使用道具 举报

千问 | 2014-2-18 16:42:02 | 显示全部楼层
[PHP]
SQL> SELECT * FROM A;
ID NO
COLNAME
---------- -------------------- --------------------
1 bill_1
sales
2 bill_1
pur
3 bill_1
mov
4 bill_2
sales
5 bill_2
pur
6 bill_3
sales
7 bill_3
mov
7 rows selected
SQL>
SQL> SELECT ID, NO, COLNAME
2FROM (SELECT ID, NO, COLNAME,
3
COUNT(*) OVER(PARTITION BY NO) AS CNT,
4
SUM(DECODE(COLNAME, 'sales', 1, 'pur', 2)) OVER(PARTITION BY NO) AS FLAGS
5
FROM A)
6 WHERE CNT = 2 AND FLAGS = 3
7/
ID NO
COLNAME
---------- -------------------- --------------------
4 bill_2
sales
5 bill_2
pur
2 rows selected
-------------------------
[/PHP]
回复

使用道具 举报

千问 | 2014-2-18 16:42:02 | 显示全部楼层
不好意思,沒看清題意
以下隻是一種方法,可以要根據你的實際情況改點數字!
[php]
SQL> select * from tt;
ID NO COLNAME
---------- ---------- ----------
1
bill_1 sales
2
bill_1 pur
3
bill_1 mov
4
bill_2 sales
5
bill_2 pur
6
bill_3 sales
7
bill_3 mov
已選取 7 個資料列.
目前歷時: 00:00:00.00
SQL> select * from (select tt.*,sum(decode(colname,'sales',1,'pur',100000,2)) over(partition by no) cnt from tt) where cnt = 100001;
ID NO COLNAME CNT
---------- ---------- ---------- ----------
4
bill_2 sales
100001
5
bill_2 pur
100001
目前歷時: 00:00:00.00
SQL>
SQL> select * from (select tt.*,sum(decode(colname,'sales',1,'pur',0.13,2)) over(partition by no) cnt from tt) where cnt = 1.13;
ID NO COLNAME CNT
---------- ---------- ---------- ----------
4
bill_2 sales
1.13
5
bill_2 pur
1.13
目前歷時: 00:00:00.00
SQL>
----
[/php]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行