2017-12-19 6 views
0

編集:現在実行中のSQuirreL SQL v.3.8.0。時間枠を変更するテーブルを変更する[WHERE/ALTER]

WHEREステートメントを使用して特定の時間枠に顧客データを取り込むテーブルを作成して保存しました。時間枠を更新するにはどうすればいいですか?私はALTER TABLE関数を使ってWHEREステートメントを変更しようとしましたが、エラーメッセージが表示されました。

オリジナルテーブル

SELECT Customer, 
AVG(CAST(ItemPrice AS FLOAT)) AS item_price, 
COUNT(DISTINCT(ReceiptIDDesc)) AS number_of_orders, 
SUM(CAST(ItemPrice AS FLOAT)) AS total_spend 
INTO Customer_data_A 
FROM Tacos 
Where (CAST(PurchaseDate AS DateTime) >= '01/01/2017 12:00') AND (CAST(PurchaseDate AS DateTime) <= '12/01/2017 12:00') 
GROUP BY Customer 

ALTER文私に次のエラーメッセージが与え

ALTER TABLE Customer_data_A ALTER COLUMN * WHERE (CAST(PurchaseDate AS DateTime) >= '01/01/2017 12:00') AND (CAST(PurchaseDate AS DateTime) <= '11/01/2017 12:00') 

エラー: '*' の近くに不正な構文を。

ます。SQLState:S0001

のErrorCode:ほとんどのSQL方言で102

+1

DBを使用してタグを設定すると、より適切な回答が得られる場合があります。 –

+1

@Theoあなたはurクエリーで何を達成しようとしていますか? – msoliman

+0

@msoliman下のJiriのポイントは私の誤解を明確にしました。私は作成したテーブルを別の時間枠で更新しようとしていましたが、これは意味がありません。まだSQLの背後にあるロジックの完全な理解を持っていない、フィードバックを感謝! –

答えて

0

、あなたは基本的に使用していたクエリは、「このクエリを実行し、新しいテーブルに結果を格納」と言います。新しいテーブルとそのデータを取得するために使用されたクエリとの間には何の関係もありません。

実際に使用したいのは、ビュー(指定されたクエリの現在のデータを常に表示するか、「名前付きクエリ」と考えるか)またはマテリアライズドビューです(実際にはテーブルにデータを格納しますが、クエリの新鮮な結果から)。

0

既存のデータをTRUNCATEし、既存のテーブル構造を読み込む(INSERT INTO)ように思えますか?

データ型の変更や制約の追加(つまり、INT列をNUMERICに変更する、または外部キー参照を追加する)には、ALTER TABLE + ALTER COLUMNを使用することが多くなります。

TRUNCATE TABLE Customer_data_A; 

INSERT INTO Customer_data_A 
(Customer, ItemPrice, Number_Of_Orders, Total_Spend) 
SELECT Customer 
     ,AVG(CAST(ItemPrice AS FLOAT)) AS item_price 
     ,COUNT(DISTINCT(ReceiptIDDesc)) AS number_of_orders 
     ,SUM(CAST(ItemPrice AS FLOAT)) AS total_spend 
FROM Tacos 
WHERE (CAST(PurchaseDate AS DateTime) >= '01/01/2017 12:00') AND (CAST(PurchaseDate AS DateTime) <= '11/01/2017 12:00') 
GROUP BY Customer; 
+0

ありがとうマイク。これは参考になります。 –

関連する問題