2013-06-24 29 views
0

我有兩個表:Employee和DealerSessions,它們是基於EmployeeID鏈接的。以下搜索查詢不返回不同的EmployeeID's。有任何想法嗎?當加入兩個表時,Distinct不起作用

SELECT distinct e.EmployeeID, e.Name, e.Surname, ds.DealerSessionsID, ds.SessionID, ds.EmployeeID AS Expr1 
FROM Employee AS e INNER JOIN 
         DealerSessions AS ds ON e.EmployeeID = ds.EmployeeID 
WHERE (ds.SessionID = 154) 
+0

嘗試從您的'select'語句中刪除'ds.DealerSessionsID'和'ds.SessionID' –

回答

3

正確。 distinct返回不同的全部該字段。如果您想要不同的EmployeeIds,請嘗試如下所示:

SELECT distinct e.EmployeeID 
FROM Employee AS e INNER JOIN 
    DealerSessions AS ds ON e.EmployeeID = ds.EmployeeID 
WHERE (ds.SessionID = 154) 

其他字段會生成多行。如果你想要一行,那麼你可以做這樣的事情:

select EmployeeID, Name, Surname, DealerSessionsID, SessionID, Expr1 
from (SELECT e.EmployeeID, e.Name, e.Surname, ds.DealerSessionsID, ds.SessionID, ds.EmployeeID AS Expr1, 
      row_number() over (partition by e.EmployeeId order by (select NULL)) as seqnum 
     FROM Employee AS e INNER JOIN 
      DealerSessions AS ds ON e.EmployeeID = ds.EmployeeID 
     WHERE (ds.SessionID = 154) 
    ) t 
where seqnum = 1; 

這隨機選擇一行。如果你想要一個特定的行(就像最近的那樣),然後爲order by選擇另一個表達式。

+0

感謝您的嘗試。我得到一個錯誤'EmployeeID分區旁邊的歧義列,並將其更改爲e.EmployeeID,它在SQL Server 2008中工作。但是,當我嘗試在Visual Studio中運行查詢時遇到錯誤預覽數據。錯誤是不允許「Over」。有任何想法嗎? – alwaysVBNET

+1

@nectarines。 。 。也許你有一個非常老的Visual Studio版本。從SQL Server 2005開始支持'row_number()'。 –

0

這是因爲您還將DealerSessions表中的列添加到SELECT語句中。

您可能在這兩者之間存在一對多關係,這會導致在每位員工的DealerSessions表中有多個條目。

您可以從SELECT語句或窄條件中刪除某些列,甚至在WHERE語句中使用更多條件。