2016-08-23 61 views
3

我想創建一個表來存儲另一個查詢的結果集。如何在sql server中創建結果集的表格

我已經試過這樣:

create table avgcost_product (
    name varchar(50), 
    productnumber varchar(50), 
    averagecost money 
) 

創建表之後,我嘗試這樣的查詢:

INSERT into avgcost_product SELECT * FROM 
(SELECT p.[Name], p.ProductNumber, 
     CONVERT(varchar, cost.AvgCost,1) as 'Average Cost' 
FROM Production.Product p 
CROSS APPLY fnGetAvgCost(p.ProductID) as cost 
WHERE cost.AvgCost IS NOT NULL 
ORDER BY cost.AvgCost desc) 

但它顯示了類似的錯誤:

消息1033,15級,狀態1,Line 284

ORDER BY cl在視圖,內聯函數,派生表,子查詢和公用表表達式中,ause是無效的,除非還指定了TOP,OFFSET或FOR XML。

如何在我的表中寫入我需要的數據?

+1

是的,這是告訴你'ORDER BY'是毫無意義的。表格不**具有任何固有的順序。 –

回答

5

只是刪除從內選擇ORDER BY或者你甚至可以簡化您的查詢甚至更多:

INSERT into avgcost_product 
SELECT p.[Name] 
     , p.ProductNumber 
     , CONVERT(varchar, cost.AvgCost,1) as 'Average Cost' 
FROM Production.Product p 
CROSS APPLY fnGetAvgCost(p.ProductID) as cost 
WHERE cost.AvgCost IS NOT NULL 
+3

只需添加到此。根據定義,SQL不按特定順序存儲數據。這就是爲什麼在實際檢索數據時使用ORDER BY非常重要,如果你確實需要它的話。 –

0

您也可以使用SELECT INTO動態創建表:

SELECT p.[Name], 
     p.ProductNumber, 
     CONVERT(varchar, cost.AvgCost,1) as [Average Cost] 
INTO avgcost_product 
FROM Production.Product p 
CROSS APPLY fnGetAvgCost(p.ProductID) as cost 
WHERE cost.AvgCost IS NOT NULL 
相關問題