2015-04-06 94 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