在多个表中的一列上选择唯一值

时间:2016-09-15 05:54:39

标签: sql oracle oracle-sqldeveloper

我的查询结果如下所示。请注意,这是在多个表格上。

EMAIL(A)  PROD_ID(B)   PROD_NAME(B)   CODE(C)
a@a.com   123456       SUNLIGHT A     002
a@a.com   123456       SUNLIGHT B     002
a@a.com   123456       SUNLIGHT C     002
a@a.com   768901       MOON           003
a@a.com   881231       STAR           004   

我的查询如下。

SELECT A.EMAIL, B.PROD_ID, B.PROD_NAME, C.CODE
FROM A
INNER JOIN B ON B.EMAIL = A.EMAIL
INNER JOIN C ON C.CODE = B.CODE
GROUP BY A.EMAIL, B.PROD_ID, B.PROD_NAME, C.CODE
ORDER BY A.EMAIL, C.CODE

我需要每PROD_ID只获得一行数据。我尝试使用MAX(B.PROD_ID) AS "PROD_ID",但我仍为PROD_ID获取了多行。有人可以就此提出建议吗?还是帮帮我吧?非常感谢!

期望的结果是:

EMAIL(A)  PROD_ID(B)   PROD_NAME(B)   CODE(C)
a@a.com   123456       SUNLIGHT A     002
a@a.com   768901       MOON           003
a@a.com   881231       STAR           004  

感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:2)

您需要以某种方式折叠/聚合PROD_NAME。我使用MIN,因为它匹配你想要的结果。你可以使用任何聚合适合你:

SELECT A.EMAIL, B.PROD_ID, MIN(B.PROD_NAME), C.CODE
FROM A
INNER JOIN B ON B.EMAIL = A.EMAIL
INNER JOIN C ON C.CODE = B.CODE
GROUP BY A.EMAIL, B.PROD_ID, C.CODE
ORDER BY A.EMAIL, C.CODE