2017-07-27 150 views
0

我遇到了GROUP BY函數的問題。我嘗試過爲我的目的使用DISTINCT函數,但是我的所有搜索都讓我嘗試使用GROUP BY函數。SQL Group By not working in Join

我有3張桌子。 Tbl1和Tbl2具有相同的列。 Tbl 3有不同的列,但我基本上試圖將所有3個表連接在一起,這個查詢正確執行。

不過,我想結果集排除在列的一個副本,Tbl3.A

,我發現了錯誤:列「DB1.dbo.Tbl2.C」是在選擇無效列表,因爲它不包含在聚合函數或GROUP BY子句中。

下面是完整的查詢:

SELECT Tbl3.A, Tbl1.C, Tbl1.B 
FROM DB1.dbo.Tbl1 
LEFT JOIN 
DB2.dbo.Tbl3 ON Tbl1.B = Tbl3.A 
WHERE …. 

UNION 

SELECT Tbl3.A, Tbl2.C, Tbl2.B 
FROM DB1.dbo.Tbl2 
LEFT JOIN 
DB2.dbo.Tbl3 ON Tbl2.B = Tbl3.A 

WHERE ….. 

GROUP BY Tbl3.A 
+0

標籤與正在使用的數據庫。 –

+0

如果要按Tbl3.A進行分組,則必須合併列Tbl1.C和Tbl1.B. – Eric

回答

0

使用子查詢。事情是這樣的:

SELECT A, MAX(C) as C, MAX(B) as B 
FROM ((SELECT Tbl3.A, Tbl1.C, Tbl1.B 
     FROM DB1.dbo.Tbl1 LEFT JOIN 
      DB2.dbo.Tbl3 
      ON Tbl1.B = Tbl3.A 
     WHERE …. 
    ) UNION 
     (SELECT Tbl3.A, Tbl2.C, Tbl2.B 
     FROM DB1.dbo.Tbl2 LEFT JOIN 
      DB2.dbo.Tbl3 
      ON Tbl2.B = Tbl3.A 
     WHERE ….. 
    ) 
    ) t 
GROUP BY A; 
+0

@TomD。 。 。然後用'as'給他們不同的名字。 –

0
SELECT NewTbl3.A, Tbl1.C, Tbl1.B 
FROM DB1.dbo.Tbl1 
LEFT JOIN 
(SELECT DISTINCT Tbl3.A) AS NewTbl3 
ON Tbl1.B = NewTbl3.A 
WHERE …. 

UNION 

SELECT NewTbl3.A, Tbl2.C, Tbl2.B 
FROM DB1.dbo.Tbl2 
LEFT JOIN 
(SELECT DISTINCT Tbl3.A) AS NewTbl3 
ON Tbl2.B = NewTbl3.A 

WHERE ….. 

GROUP BY NewTbl3.A