2010-06-30 42 views
3

爲什麼這個查詢不起作用?Sql Server查詢不能用作子查詢

Select temp.CompanyName from 

(
    SELECT c.CompanyName, o.OrderID, 
      YEAR(o.OrderDate) As YEAR, 
      Sum(od.UnitPrice * od.Quantity) from Orders o 
     INNER JOIN [Order Details] od 
      ON o.OrderID = od.OrderID 
     INNER JOIN Customers c 
      On c.CustomerID = o.CustomerID 
       GROUP BY o.OrderId,c.CompanyName, YEAR(o.OrderDate) 

) As temp; 

它使用Northwind數據庫。如果我在不創建臨時視圖的情況下運行它,即,如果我運行剛纔包含在圓括號內的查詢,它運行得很好。

回答

5

在第一次看我說,因爲你的總和()沒有列別名

+0

非常好。你是對的。但是,不使用列別名會導致什麼問題?如果我運行它而不創建視圖,它運行得很好。 – TCM 2010-06-30 12:25:09

+1

首先,這被稱爲子查詢,而不是視圖。其次,問問你自己如何在父查詢中引用一個沒有名字的列,我想你會明白爲什麼這是一個錯誤。 – 2010-06-30 12:26:20

+0

哦,謝謝我認爲這是視圖,因爲我們選擇了一些東西,然後再從「某物」中選擇。 – TCM 2010-06-30 12:27:37

1

試試這個:

Select CompanyName from 
(
    SELECT c.CompanyName, o.OrderID, 
      YEAR(o.OrderDate) As YEAR, 
      Sum(od.UnitPrice * od.Quantity) as price from Orders o 
     INNER JOIN [Order Details] od 
      ON o.OrderID = od.OrderID 
     INNER JOIN Customers c 
      On c.CustomerID = o.CustomerID 
       GROUP BY o.OrderId,c.CompanyName, YEAR(o.OrderDate) 

) temp