日期:2014-05-17  浏览次数:20770 次

统计一个表的字段数量,有两个条件限制
如题
表S 要统计的字段为A 
两个限制条件的字段为B和C 
B的限制的内容是在表中统计B有相同值的数量 
再从这个数量里统计出C相同的数量。
SELECT A FROM S WHERE
B = (SELECT B ,COUNT(1)AS "B相同的数量" FROM S GROUP BY B)
AND 
C = (SELECT C ,COUNT(1)AS "C相同的数量" FROM S GROUP BY C)

得出的结果是值过多。这怎么解决啊

------解决方案--------------------
不知所云!
------解决方案--------------------
值过多的意思是 你的等式=左右不相等 =左右必须都是一个值! 而明显你的B = (SELECT B ,COUNT(1)AS "B相同的数量" FROM S GROUP BY B)
=右边有2个值。
C = (SELECT C ,COUNT(1)AS "C相同的数量" FROM S GROUP BY C)也一样的错误。
------解决方案--------------------
说这人都是晕的 能列举具体数据看看么? 这意思? 
SQL code

SELECT A 
FROM S t1 WHERE
B = (SELECT COUNT(1) AS "B相同的数量" FROM S where B=t1.B)

------解决方案--------------------
列举 表结构和数据以及想要的结果 不然谁知道LZ说的什么意思啊
------解决方案--------------------
这个意思?
SQL code

create table t1 (t_id number(10),a varchar2(10),b varchar2(10),c varchar2(10));

insert into t1 values (1,'1','2','3');
insert into t1 values (2,'4','5','6');
insert into t1 values (3,'1','2','3');
insert into t1 values (4,'1','3','3');
insert into t1 values (5,'2','2','3');
insert into t1 values (6,'1','2','3');
insert into t1 values (7,'1','3','3');

select a,b,c,max(d) 重复数量 from
(select a,b,c,rank() over(partition by a,b,c order by t_id) d
from t1)
group by a,b,c


a   b   c   重复数量
---------------------------------------
1    2    3    3
1    3    3    2
2    2    3    1
4    5    6    1

------解决方案--------------------
只是要一个总计的话,不用这么麻烦。

SQL code
select count(*) from table 
  where rowid not in (
         select max(rowid) from table
         group by a,b,c)