2016-09-30 160 views
0

假设我有像列交叉口

ID  PROD  UNIT 
1 | 100 | X 
2 | 100 | Y 
3 | 100 | Z 
4 | 200 | X 
5 | 200 | Y 
6 | 300 | Y 
7 | 300 | Z 

欲获得的值从单位列的交点从PROD列中的每个代码的表,由一个SQL查询。表格中的产品数量是可变的,但我需要为所有产品交叉UNIT。 在我的例子,结果表将与单行表,因为从PROD所有产品的共同点只有一个单元:

PROD UNIT 
300  Y 
+0

你有尝试过什么吗?你发现什么不工作? – dfundako

+0

@dfundako我尝试了一些基于count(*)的选择...但是我认识到使用UNIT计数/分组在这个问题中根本无济于事......所以目前我还不知道从哪里开始 – relysis

+0

你说你的结果集应该只有Y作为UNIT,因为它是所有PROD都有的唯一共同点。但为什么你的结果集只有一个PROD?什么是要显示哪个值? –

回答

1
SELECT MAX(PROD) as Prod, Unit 
FROM 
    TableName 
GROUP BY 
    Unit 
HAVING 
    COUNT(DISTINCT PROD) = (SELECT COUNT(DISTINCT PROD) FROM TableName) 

你需要能够在DISTINCT Count of Products grouped by Unit与比较DISTINCT Count of All Products in the table。您可以在HAVING子句中使用子查询来完成此操作。

我认为你想要Maximum PROD Id,根据你的结果,如果你想要其他的东西,如果你想要所有的记录只是用它作为派生表,并加入回来得到你想要的结果。