Я пытаюсь создать представление в SQL Server 2008 R2, где данные извлекаются из двух таблиц с двойными отношениями один к одному, и я хочу создать два столбца в представлении на основе значений из одного столбца в одной из таблиц.SQL Создание нескольких столбцов в представлении из одного столбца таблицы
Таблицы в настоящее время похожи на эти примеры:
TableA:
PrimaryKey | Name | Value_FK | Number_FK
-------------------------------------------
66 | NameA | 1 | 2
77 | NameB | 3 | 4
TableB:
PrimaryKey | Value
-------------------
1 | 238
2 | 456
3 | 100
4 | 200
Взгляд должен выглядеть следующим образом:
Name | Value | Number
-------------------------
NameA | 238 | 456
NameB | 100 | 200
(«Va lue 'и' Number ', по сути, одного и того же типа, и оба они находятся в столбце «Значение» в TableB. Я думал, что было бы легче дистанцироваться между «Value» и «Number», чем «ValueA» и «ValueB»).
Фактор, который должен решить, какие значения следует вводить в столбце «Значение» или «Номер столбца», является PrimaryKey в TableB и его ссылками в любом из иностранных ключей в TableA (но оба FK никогда не будут ссылаться на один и тот же ключ).
Это, скорее всего, не самая блестящая модель базы данных, имеющая двойственные отношения между таблицами. Однако это связано с отображением некоторых классов C# .NET в базу данных с использованием ADO.NET Entity Framework, где класс 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
Теперь любой suggestiong как то, чтобы заполнить в запросе?
Сначала никогда не используйте неявные соединения, они являются антипаттером SQL. Они, скорее всего, будут изношены и намного сложнее с течением времени поддерживать. Они также более 20 лет устарели. – HLGEM