2015-04-06 112 views
-3

我对SQL的工作,我有两个表如何获得用逗号分隔的逗号值?

EId Ename 
1  john 
2  alex 
3  piers 
4  sara 

,第二个表是

PID PNAME EID 
1  mcndd 1 
2  carter 1 
3  leare 2 
4  jain 2 

结果应该是

EID count PID 
1  2  1 
1  2  2 
2  2  3 
2  2  4 

我要为this.i查询曾尝试过这样的

SELECT t1.EID, COUNT(t1.EID) count,PID 
from Employertable t1 
INNER JOIN persontable P ON P.EID=t1.EID 
Group By t1.EID Having Count(T1.EID) > 1 
+1

请阅读'join'和'组by'那些会给你,你的回答。 – 2015-04-06 05:56:42

+0

感谢回复@marc_s我刚刚编辑我试过这样我得到的PID是无效的,不包含任何聚合函数 – 2015-04-06 07:48:48

+0

当使用GROUP BY子句时,您的'SELECT'列表**中的每列必须是**或者由一个聚合('COUNT','SUM','AVG'等)处理,或者如果不是这种情况,它必须在** GROUP BY子句中提及**。所以在你的情况下,你**必须**使用'GROUP BY t1.EID,PID' - – 2015-04-06 07:52:11

回答

1

你可以使用窗口功能来做到这一点。有了这些功能,您可以用非聚合数据合并汇总数据:

DECLARE @t1 TABLE (EID INT) 
DECLARE @t2 TABLE (PID INT, EID INT) 

INSERT INTO @t1 
VALUES (1), 
     (2), 
     (3), 
     (4) 
INSERT INTO @t2 
VALUES (1, 1), 
     (2, 1), 
     (3, 2), 
     (4, 2) 


SELECT * 
FROM (SELECT t1.EID , 
        COUNT(*) OVER (PARTITION BY t2.EID) AS C , 
        t2.PID 
      FROM  @t1 t1 
        JOIN @t2 t2 ON t2.EID = t1.EID 
     ) t 
WHERE t.C > 1   

输出:

EID C PID 
1 2 1 
1 2 2 
2 2 3 
2 2 4 
+0

感谢回复@ Giorgi Nakeuri让我试试plz – 2015-04-06 08:00:32

+0

hi @@ Giorgi Nakeuri,但我得到了不一样的结果,我用id 2 count = 14条记录,但结果返回84 – 2015-04-06 08:08:52

+0

可以解释我关于“COUNT(*)OVER(由t2划分。 EID)AS C,“ – 2015-04-06 08:09:13