2016-03-06 71 views
1

我想了解如何爲以下內容編寫SQL的一些指導?使用Select Distinct to output

可以說我有如下表:

Employee 
EmpNo | EmpName | EmpCommRate 
1 | John | 0.020 
2 | Lewis | 0.040 
3 | Bobby | 0.030 
4 | Pete | 0.050 

Orders 
OrdNo | EmpNo 
101 | 1 
102 | 1 
103 | 4 
104 | 2 
105 | 3 
106 | 3 
107 | 1 

對於少於0.040佣金每個員工,計算獲得的訂單數。結果應包括員工編號,員工姓名,員工佣金率以及該員工所執行訂單的總數。假設訂單中每個不同的OrdNo都被視爲一個不同的訂單。每位員工只能顯示一次;例如,如果員工米奇拿下了五份訂單,則應該有一行顯示他的名字,而不是五個。

輸出應該是:

EmoNo | EmpName | EmpCommRate | Total Orders 
1 | John | 0.020 | 3 
3 | Bobby | 0.030 | 2 

什麼是最好的SQL命令的輸出上面?

+0

什麼是你嘗試過的SQL。你至少應該試試。然後告訴我們什麼是不工作的,如果有的話。 – trincot

回答

-1

你需要的是一個連接和group by子句,像這樣:

SELECT t.empNo,t.empName,t.empCommRate,count(distinct s.ordNo) as Total 
FROM Employee t 
INNER JOIN Orders s 
ON(t.empNo = s.empNo) 
WHERE t.empCommRate < 0.040 
GROUP BY t.empNo,t.empName,t.empCommRate 

它也可以與相關的查詢就像這樣:

SELECT t.empNo,t.empName,t.empCommRate, 
     (select count(distinct s.ordNo) from orders s 
     where s.empno = t.empno) as Total 
FROM Employee t 
WHERE t.empCommRate < 0.040 
+0

這裏的最後一列是'總計'而不是'總訂單'。 – SevenOfNine

+0

好的,? @sevenofnine – sagi

+0

正如你在問題中看到的那樣,他問最後一欄是'Total Orders'而不是'Total' – SevenOfNine

-1

試試這個

SELECT e.EmpNo, EmpName, EmpCommRate, count(*) AS 'Total Orders' 
FROM Employee e, Orders o 
WHERE e.EmpNo = o.EmpNo 
AND EmpCommRate < 0.040 
GROUP BY e.EmpNo, EmpName, EmpCommRate 
+1

永遠不要教新人使用IMPLICIT連接語法!始終使用正確的連接語法。 – sagi

+0

爲什麼這是一個問題?有這樣兩種可能性的原因。這個解決方案在我眼中更直觀。此外,他並沒有要求教他,而是要給他「最好的SQL命令」。 這裏還有一個關於這個的討論:http://stackoverflow.com/questions/44917/explicit-vs-implicit-sql-joins – SevenOfNine

+0

當連接多個表時,隱式連接語法肯定會導致錯誤。 SQL初學者應該使它成爲僅使用顯式連接語法的習慣。 – sagi