SQL Server 2008 R2 でビューを作成しようとしています。このビューでは、二重の 1 対 1 の関係を持つ 2 つのテーブルからデータが抽出されます。ビューに 2 つの列を作成し、いずれかの 1 つの列から値に基づいて作成したいと考えています。テーブル。
現在、表は次の例のようになっています。
表 A:
PrimaryKey | Name | Value_FK | Number_FK
-------------------------------------------
66 | NameA | 1 | 2
77 | NameB | 3 | 4
表 B:
PrimaryKey | Value
-------------------
1 | 238
2 | 456
3 | 100
4 | 200
ビューは次のようになります。
Name | Value | Number
-------------------------
NameA | 238 | 456
NameB | 100 | 200
('Value' と 'Number' は本質的に同じ型で、どちらも TableB の 'Value' 列にあります。 'ValueB')。
列「値」または列「番号」に入る値を決定する要因は、TableB の PrimaryKey と、TableA のいずれかの外部キーでのその参照です (ただし、両方の FK が同じキーを参照することはありません)。
これは、テーブル間に二重の関係を持つ、最も優れたデータベース モデルではない可能性があります。ただし、これは ADO.NET Entity Framework を使用して一部の C#.NET クラスをデータベースにマッピングするためです。クラス A にはクラス B の 2 つのオブジェクト (この場合は「値」と「数値」という名前) があり、現在のデータベース モデルはこれにより、2 つの関係が構築されます。これを変更することはできません。
これをグーグルで検索してみましたが、必要な答えを見つけるのは難しいと思います。特に、ほとんどの結果が反対の場合: 複数の列を選択して 1 つの列にします。
では、Select ステートメントはどのように記述すればよいでしょうか。
CREATE VIEW ViewName
AS
SELECT DISTINCT a.Name as 'Name', ????? as 'Value', ????? as 'Number'
FROM TableA a, TableB b
私は高度なSQLコマンドにかなり慣れていません。最後に私がこれほど高度なものに夢中になってから1年半以上経ちました。最初にこれに似たものを試しました:
CREATE VIEW ViewName
AS
WITH Name AS
( SELECT DISTINCT a.Name FROM TableA a )
Value AS
(
SELECT DISTINCT b.Value as 'Value' FROM TableA a, TableB b
WHERE b.PrimaryKey = an.ValueA_FK
),
Number AS
(
SELECT DISTINCT b.Value as 'Number'
FROM TableA a, TableB b
WHERE a.PrimaryKey = an.ValueB_PrimaryKey
)
SELECT DISTINCT
* FROM Name, Value, Number
完全に失敗した試みの結果は次のようになります。
Name | Value | Number
-------------------------
NameA | 100 | 200
NameB | 100 | 200
NameA | 100 | 456
NameB | 100 | 456
NameA | 238 | 200
NameB | 238 | 200
NameA | 238 | 456
NameB | 238 | 456
さて、クエリに何を入力するかについて何か提案はありますか?