sql group通过查找两列不同值的所有组合

时间:2014-08-05 10:40:30

标签: sql oracle oracle11g

我有下表

ORDID  EMPID     ITEMCOST       TIME
-------------------------------------    
10023 B2690          675       1992
10024 C3467         8078       1992
10025 B2690        15481       1992
10026 C5621        22884       1992
10027 B2109        30287       1992
10030 B3297        52496       1993
10031 C3467        59899       1993
10032 F5621        67302       1993
10033 G3467        74705       1993

等很多行......

我试图找出每年都购买一些物品的人。 换句话说,想要找出该表中每年存在的empid。

BTB我正在使用Oracle 11g Express。

提前致谢。

2 个答案:

答案 0 :(得分:2)

您可以使用having子句执行此操作,您可以将每个empid的不同年份数与数据中不同年份的数量进行比较:

select empid
from followingtable
group by empid
having count(distinct time) = (select count(distinct time) from followingtable);

答案 1 :(得分:0)

以下查询也可以。

SELECT TAB.EMPID FROM
(
     SELECT A.EMPID, COUNT(DISTINCT A.TIME) YEARCOUNT  FROM MY_TABLE A GROUP BY EMPID
) TAB

 WHERE TAB.YEARCOUNT = (SELECT COUNT(DISTINCT B.TIME) FROM MY_TABLE B)