2017-05-16 12 views
0

テーブルが2つあります.1つは「Shop」、もう1つは「GlobalSettings」です。 'GlobalSettings'と 'Shop'にはいくつかの同じ列が含まれています。この考え方は、ユーザーが 'ショップ'レベルの設定を保存できるようにするだけでなく、 'GlobalSettings'を使ってそれらをオーバーライドできるようにすることです。私は 'OverrideSettings'と呼ばれる 'GlobalSettings'の真偽フィールドに基づいて正しい列を出力するビューを作成しようとしています。カラム値に基づいたSQLビューの作成

'OverrideSettings'がtrueの場合は、 'GlobalSettings'で使用されている列を出力し、そうでない場合は 'Shop'に出力します。

ビューでこれを行うことはできますか?

すべてのヘルプは おかげ

+0

サンプルテーブルのデータと期待される結果をすべてフォーマット済みのテキストとして追加します。 – jarlh

+0

答えが役に立ちましたか? – SAS

答えて

0

がテーブルに参加して、私が作ったWHENコル

AS GlobalSettings ENDからOverrideSettings ELSE値からOverrideSettingsが= THEN 1値WHENあなたSELECT(CASEでCASEを使用して、素晴らしいことです以下のデータモデルなど、いくつかの仮定が、しかし、あなたは一般的なアイデアを得る必要があり、私は願っています:

Select CASE WHEN gs.overridesettings=1 THEN gs.val1 ELSE s.val1 END 
FROM shop AS s 
LEFT OUTER JOIN globalsettings AS gs 
ON gs.ShopId = s.ShopId 
AND s.col1 = gs.col1 
0
CREATE VIEW v AS 
Select a.col1,a.col2,a.col3 
from shop a inner join globalsettings b on a.col1=b.col1 --Join as per matching cols 
where b.overridesettings=false 
    union 
select col1,col2,col3 
from globalsettings where overridesettings=true 

または

CREATE VIEW v AS 
Select Case when b.overridesettings=false Then a.col1 else b.col1 end, 
     Case when b.overridesettings=false Then a.col2 else b.col2 end , 
     Case when b.overridesettings=false Then a.col3 else b.col3 end 
from shop a 
inner join globalsettings b 
on a.col1=b.col1 --Join as per matching cols 
+0

globalsettingsに一致する行がない場合は、おそらく左外部結合が良いでしょう。 – SAS

+0

選択する値は、おそらく結合されている値ではありません。 – SAS

関連する問題