2017-08-25 11 views
0

次のテーブル(テーブルConfigValue)には、機能とオプションが宣言されています機能のオプションが表示されていないと1オプションが表示されている意味値に対して、ゼロはオプションが選択されていないことを意味し、1は)オプションが選択されていることを意味します。SQLサーバーが同じテーブルに2回参加して、別の列のレコードに基づいて列のレコードを更新します。

Feature_ID | OptionValue | value | visible 
---------- | ----------- | ----- | ------- 
300  | 1   | 0  | 1 
310  | 2   | 0  | 1 

は、私が使用したいです次の表(OptionValue表)を参照して、オプション間の依存関係を作成します。この場合、特徴300からのオプション1が選択された場合(すなわち値= 1)、特徴310からのオプション2は可視ではない(すなわち、可視= 0)。一方、フィーチャ300からのオプション1が選択されていない場合、フィーチャ310からのオプション2は可視であるべきである。

Feature_ID_1 | OptionValue_1 | Feature_ID_2 | OptionValue_2 | 
------------ | ------------- | ------------ | --------- 
300   | 1    | 310   | 2 

私は上記を更新ステートメントに翻訳したいと思いますが、どこから始めるべきかわかりません。


リスの答え

次のSELECT文に基づいて更新が正しい出力

Select CF.FeatureID As Feature_ID_1, 
    CF.OptionValue As OptionValue_1, 
    CF.value AS Value_1, 
    CF.visible AS Visible_1, 
    OV.FeatureID As Feature_ID_2, 
    OV.OptionValue As OptionValue_2, 
    OV.value AS Value_2, 
    Case When CF.Value = 1 Then 0 Else 1 End As Visible_2 
    From [VlastuinTEST].[dbo].[ConfigValue] as CF 
    Cross Join [VlastuinTEST].[dbo].[ConfigValue] as OV 
    Where CF.FeatureID = 300 
    And OV.FeatureID = 310 

を生成することは目に見える返す機能300からオプション1である場合には、機能310からオプション2のために0であります選択された。しかし、他のオプションが選択されたときに表示すべきではないオプションの組み合わせをこの表に記入したいので、2番目のテーブルが必要です(optionValueではfeature_ID_1でOptionValue_1はConfigValueでFeatureValueにOption1を、 Feature_ID_2とOptionValue_2は、visibleを0に更新するConfigValueのFeature_IDとOptionValueを表す必要があります。

この場合でもOptionValueテーブルはどのように使用できますか?また、selectクエリの更新クエリを作成するために変更する必要があるものは何ですか?

+0

まず、更新が必要なレコードと設定する必要のある値を示す「SELECT」クエリを作成します。あなたは 'INNER JOIN'を書く方法に関する簡単なチュートリアルを見ることから始めることができます。 htt38://www.w3schools.com/sql/sql_join_inner.aspとインターネットを検索 – Alex

+0

この問題に関するあなたの説明をよく理解していません。この文「機能310のオプション1は表示できません(つまりvisible = 0)」は、投稿したサンプルデータと一致しないようです。また、「OptionValue_1」は「2」になり、「OptionValue_2」は「1」になりましたか? – Squirrel

+0

@Squirrelごめんなさい。私は私の質問を編集しました。 – user2237168

答えて

0

これはあなたが望むものですか?

Select CF.FeatureID As Feature_ID_1, 
     CF.OptionValue As OptionValue_1, 
     OV.FeatureID As Feature_ID_2, 
     Case When CF.OptionValue = 1 Then 0 Else 1 End As OptionValue_2 
From [VlastuinTEST].[dbo].[ConfigValue] as CF 
Cross Join [VlastuinTEST].[dbo].[ConfigValue] as OV 
Where CF.FeatureID = 300 
And OV.FeatureID = 310 
+0

あなたの応答リスありがとう。私は正しい出力を得るために少し質問を編集しました。しかし、私はまだ質問があります(この質問は私の主な質問にあります) – user2237168

関連する問題