2011-07-27 47 views
1

我无法制定SQL语句来返回我想要的值。我需要根据用户ID,第二列的值和第三列值选择数据,其中该列中的值不止出现一次。所有列都在同一个表内。Oracle SQL-列值与条件不一样

下面是我的查询现在的样子的大致轮廓,但最后的AND语句显然只是给你一个我想要的东西的想法。可能会缩小结果的COUNT语句可能对我无效。

SELECT * 
FROM table 
WHERE user_id = 123 
AND second_id = 1 
AND third_id having COUNT(1) > 1; 

回答

4

如果你需要的是列user_id说明,second_id,third_id那就试试这个:

SELECT user_id, second_id, third_id, COUNT(1) 
FROM table 
WHERE user_id = 123 
AND second_id = 1 
GROUP BY user_id, second_id, third_id 
HAVING COUNT(1) > 1; 

如果您有其他的列,并希望得到这些领域也试试这个(甲骨文以上9.2 & ):

WITH qry AS 
(
    SELECT a.*, 
      COUNT(1) OVER(PARTITION BY user_id, second_id, third_id) rpt_count 
FROM table a 
WHERE user_id = 123 
AND second_id = 1 
) 
SELECT * 
    FROM qry 
    WHERE rpt_count > 1 
+0

第二个选项看起来像我所需要的,谢谢。但是,我认为如果可以提供帮助,我还需要执行一个步骤 - 我需要将这些结果作为子查询的一部分使用,因此完整查询将查看这些结果,并将MIN(fourth_id)从结果。 – Major