我正在尝试在 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
现在,有什么建议可以填写查询吗?