2016-09-15 97 views
0

我的查询结果如下。请注意,这是在多个表格上。在多个表格的一列中选择唯一值

EMAIL(A) PROD_ID(B) PROD_NAME(B) CODE(C) 
[email protected] 123456  SUNLIGHT A  002 
[email protected] 123456  SUNLIGHT B  002 
[email protected] 123456  SUNLIGHT C  002 
[email protected] 768901  MOON   003 
[email protected] 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只得到1行数据。我尝试使用MAX(B.PROD_ID) AS "PROD_ID",但我仍然得到多行PROD_ID。任何人都可以提出一些建议吗?还是帮助我?非常感谢!

期望的结果是:

EMAIL(A) PROD_ID(B) PROD_NAME(B) CODE(C) 
[email protected] 123456  SUNLIGHT A  002 
[email protected] 768901  MOON   003 
[email protected] 881231  STAR   004 

任何帮助理解。谢谢!

回答

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 
+0

谢谢!我一直在试图使用MAX不知道MIN会做的伎俩。 :) 非常感谢! – thebeast22

+0

我认为这个查询将无法正常工作的情况下,列EMAIL将包含不同的值。 – AlexSmet

+0

是的,但是可以使用相同的技巧。 –