2016-08-23 14 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 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 
関連する問題