我正在尝试在 SQL Server 2008 R2 中创建一个视图,其中数据是从具有双重一对一关系的两个表中提取的,并且我想在其中一个中的单个列中创建基于视图的值中的两列表。
这些表目前类似于以下示例:
表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' 列中找到。我认为区分 'Value' 和 'Number' 比区分 'ValueA' 和'价值B')。
应该决定哪些值进入“值”列或“数字”列的因素是 TableB 中的 PrimaryKey 及其在 TableA 中的任一外键中的引用(但两个 FK 绝不应引用相同的键)。
这可能不是最出色的数据库模型,在表之间具有双重关系。然而,这是由于使用 ADO.NET Entity Framework 将一些 C#.NET 类映射到数据库,其中 A 类有 B 类的两个对象(在本例中名为“值”和“数字”),以及当前的数据库模型因此构建了两个关系。改变这不是一种选择。
我试过用谷歌搜索这个,但我发现很难找到我需要的答案。尤其是当大多数结果正好相反时:将多列选择为一列。
那么,我应该如何编写 Select 语句呢?
CREATE VIEW ViewName
AS
SELECT DISTINCT a.Name as 'Name', ????? as 'Value', ????? as 'Number'
FROM TableA a, TableB b
我对高级 SQL 命令很生疏。自从上次我进入这么先进的东西以来,已经过去了 1.5 年。我首先尝试了类似的东西:
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
现在,有什么建议可以填写查询吗?