2014-01-12 48 views
0

我正在使用Northwind精簡版數據庫,並試圖提取哪些銷售人員獲得了多少。不能內部加入到嵌入式查詢中

所以,我的查詢做工精細的內部零件,在我得到員工ID的總費用清單:

select orderCosts."Employee ID", sum(orderCosts.Cost) as OrderCost from 
    (
     select Orders."Order Id",orders."Employee ID", orders."Customer ID", "Order Details"."Unit Price" * "Order Details"."Quantity" as Cost from orders 
     inner join "Order Details" 
     On Orders."Order ID" = "Order Details"."Order ID" 
    ) orderCosts 
    group by ordercosts."Employee ID" 

我的想法是好的,我會再嘗試加入到僱員表,這似乎並不複雜,但現在我得到一個"The table aliases must be unique. [Name of duplicate alias = employeePerformance]"錯誤。我嵌入式和命名的表,貌似我面前,像這樣:

select Employees."FirstName", Employees."LastName", employeePerformance.OrderCost 
from 
(
    select orderCosts."Employee ID", sum(orderCosts.Cost) as OrderCost from 
    (
     select Orders."Order Id",orders."Employee ID", orders."Customer ID", "Order Details"."Unit Price" * "Order Details"."Quantity" as Cost from orders 
     inner join "Order Details" 
     On Orders."Order ID" = "Order Details"."Order ID" 
    ) orderCosts 
    group by ordercosts."Employee ID" 
) employeePerformance 
inner join employeePerformance 
On Emplyees."Employee ID" = employeePerformance."Employee ID" 

我可以看到,我只聲明empployeePerformance一次,然後試圖內連接到它,那麼它爲什麼認爲我有兩次?

我對SQL很陌生,所以如果我正在做一些傻事,請客氣一點!

回答

1

我想你應該對員工添加FROM,在您的查詢的子查詢的聯接(如果我深知)

select Employees."FirstName", Employees."LastName", employeePerformance.OrderCost 
from Employees 
INNER JOIN 
(
    select orderCosts."Employee ID", sum(orderCosts.Cost) as OrderCost from 
    (
     select Orders."Order Id",orders."Employee ID", orders."Customer ID", "Order Details"."Unit Price" * "Order Details"."Quantity" as Cost from orders 
     inner join "Order Details" 
     On Orders."Order ID" = "Order Details"."Order ID" 
    ) orderCosts 
    group by ordercosts."Employee ID" 
) employeePerformance 

On Employees."Employee ID" = employeePerformance."Employee ID" 

原因,您從上employeesPerformance和employeesperformance內加入=>重複名稱,這是不允許的。

順便說一句,你的查詢可以廣泛簡化,我想:

SELECT e."FirstName", e."LastName", sum(od."Unit Price" * od."Quantity") as OrderCosts 
FROM employees e 
inner join orders o on o."Employee ID" = e."Employee ID" 
inner join "Order Details" od on od."Order ID" = o."Order ID" 
group by e."Employee ID", e."FirstName", e."LastName" 

使用左連接,而不是內部聯接(和凝聚在單價和數量),如果你希望員工沒有訂單/訂單的詳細信息。

SELECT e."FirstName", e."LastName", sum(coalesce(od."Unit Price", 0) * coalesce(od."Quantity", 0)) as OrderCosts 
FROM employees e 
left join orders o on o."Employee ID" = e."Employee ID" 
left join "Order Details" od on od."Order ID" = o."Order ID" 
group by e."Employee ID", e."FirstName", e."LastName" 
+0

我想我明白了;它看起來像我的語法錯了,實際上,試圖將表加入自己? –

+0

@ImmortalBlue好的(它不是一張表,而是一個別名子查詢,但效果是一樣的。 –