2017-03-14 17 views
0

noobここでSQLに関する質問。私はSQL Server 2012にデータベースを持っていて、別のMySQLデータベースにアクセスして、取りたい情報を持っています。SQL Serverあるテーブルの列を別のテーブルから更新する

ワークステーションの数量を表す列を更新したいと思います。その情報は他のデータベースにあります。モデル番号が各データベースで一致するすべてのアイテムの数量を更新するクエリを構造化したいと思います。

私がどのような作業をしたいのかを実証するために、2つのselect文を追加します。

私が取りたい他のデータベースのデータ。この結果、私は更新したい

enter image description here

私のデータベースを生成

SELECT * 
FROM OPENQUERY(S3MONITOR, 
'SELECT count(BuildDriver) AS ''# of Workstations'', BuildDriver AS ''Workstation Model'' 
FROM workstation 
GROUP BY BuildDriver') 

enter image description here

モデル

は必ずモデル名を作るために私のデータベースに更新されます。この結果を生成

SELECT NumOfDevices, Model 
FROM dbo.Currency 
INNER JOIN dbo.SubCategory 
ON Currency.SubCategoryId = SubCategory.SubCategoryId 
WHERE SubCategory.SubCategoryName = 'WorkStation'; 

互いに対応するが、その間に私が使用してクエリをテストしたいのですがM93z。では、モデル名が等しい他のデータベースの#台のワークステーションを使用して、データベース内のNumofDevicesを更新する最も理想的な方法は何でしょうか?

申し訳ありませんこれは明らかな質問ですが、私はまだSQLの問題であり、このようなことについては私には直感的ではありません。

EDIT:最終目標は、SQL Serverエージェントのスケジュールされたジョブを使用してすべてのワークステーションの数量を毎日更新することですが、私が来たらブリッジを通過します(実際には、この求人求人情報の取扱いは、すぐにわかるようになりました)、あなたの提案が変更された場合には、この情報を含めたいと思います。

答えて

1

updateステートメントでjoinを使用できます。

with newvals as (
     SELECT * 
     FROM OPENQUERY(S3MONITOR, 
'SELECT count(BuildDriver) AS ''# of Workstations'', BuildDriver AS ''Workstation Model'' 
FROM workstation 
GROUP BY BuildDriver' 
        ) oq 
    ) 
update c 
    set NumOfDevices = newvals.num_workstations 
    from dbo.Currency c join 
     dbo.SubCategory sc 
     on c.SubCategoryId = sc.SubCategoryId join 
     newvals 
     on newvals.model = c.model 
where sc.SubCategoryName = 'WorkStation'; 

注:これは、すでにテーブルにある値を更新します。新しい行を追加する場合は、mergeを使用します。このような場合は、別の質問をしてください。この質問は特に更新に関するものです。

+0

美しい、私は昼食から戻ってくるときに私はテストドライブのためにこれを取るでしょう。そして、私は新しい行や何かを追加しようとしないので、あなたが直接私の質問に対処したかのように見えます。どうもありがとうございます! – David

+0

これは、列名の一部を変更するのではなく、完全に機能しました。ありがとうございました。 – David

関連する問題