2014-01-06 47 views
-1

Neea帮助在sql中进行分组。SQL分组问题

我有表像

id1 id2 type 
1 1 300 
1 3 300 
1 2 300 
1 5 300 
2 2 100 
2 5 200 
2 7 300 
4 3 100 
4 9 300 
4 2 300 

我需要映射到只有一种类型的ID1,
对于例如,ID1“1”只映射到输入300,所以它应该只被检索
如果有多个类型映射到id1,则不应检索它。请帮忙。
这是我所尝试的。但它只能处理类型300.
我需要检索所有映射到一个特定类型的id1。所以如果id1'2'单独映射为'100'类型,它也应该被检索。

SELECT distinct id1 from ID_TABLE where type = 300 and id1 not in 
(SELECT id1 from type_table where type in (100, 200, 250)) 
and id1 in (SELECT id1 FROM ID_TABLE type=300) 
order by id1 
+0

问题要求代码必须表现出对问题的理解最小正在解决。包括尝试解决方案,以及为什么他们不工作。 – Kermit

+1

你能否更新你的问题并添加预期结果?另外,正如已经指出的那样,请显示您迄今为止所尝试的内容。 –

回答

2

SQL Fiddle

的Oracle 11g R2架构设置

CREATE TABLE tbl (id1, id2, type) AS 
      SELECT 1, 1, 300 FROM DUAL 
UNION ALL SELECT 1, 3, 300 FROM DUAL 
UNION ALL SELECT 1, 2, 300 FROM DUAL 
UNION ALL SELECT 1, 5, 300 FROM DUAL 
UNION ALL SELECT 2, 2, 100 FROM DUAL 
UNION ALL SELECT 2, 5, 200 FROM DUAL 
UNION ALL SELECT 2, 7, 300 FROM DUAL 
UNION ALL SELECT 4, 3, 100 FROM DUAL 
UNION ALL SELECT 4, 9, 300 FROM DUAL 
UNION ALL SELECT 4, 2, 300 FROM DUAL 
UNION ALL SELECT 4, 4, 200 FROM DUAL 
UNION ALL SELECT 5, 2, 200 FROM DUAL 
UNION ALL SELECT 5, 4, 200 FROM DUAL; 

查询1

SELECT id1, 
     MIN(type) 
FROM  tbl 
GROUP BY id1 
HAVING COUNT(DISTINCT type) = 1 

Results

| ID1 | MIN(TYPE) | 
|-----|-----------| 
| 1 |  300 | 
| 5 |  200 | 
0

后下面你的group by仍可能有多个id1所以having将限制到只有那些情况下,当有A型单ID1。使用MIN作为这里的任意聚合,因为这里只有一个值无论如何:

SELECT MIN(id1), type 
FROM type_table 
    GROUP BY type 
HAVING COUNT(id1)=1;