TSQL - выбор значений столбцов из одной таблицы в другую - PullRequest
0 голосов
/ 04 октября 2018

В операторе выбора (MSSQL 2012) я хочу добавить значения столбцов из одной таблицы в другую.

Лучше всего объяснить с помощью этой картинки: enter image description here

Я хочу добавить текст Менеджер из первой таблицы в Роль второй уже объединенной таблицы, включая имена столбца Менеджер.

КакВ результате появятся еще две строки (DeptID 1 и DeptID 2) с именем роли «Менеджер» и «Пользователь A» и «Пользователь B» в столбце Участник.

Точно так же, как имя роли всегда должно быть«Менеджер» SubTeamName всегда должен быть «Core».

Пример данных:

CREATE TABLE Base
    (DeptID int, [Manager] varchar(13))
;

INSERT INTO Base
    (DeptID,[Manager])
VALUES
    (1,'User A'),
    (2,'User B'),
    (3,'User C')
;

CREATE TABLE TeamMember
    (ID int,DeptID int,RoleID int, [Member] varchar(57) )
;
INSERT INTO TeamMember
    ([ID],DeptID, RoleID, Member)
VALUES
    (44, 1,2, 'User D'),
    (55, 2,3, 'User E')
;

CREATE TABLE SubTeam
    (ID int, [SubTeamName] varchar(57) )
;

INSERT INTO SubTeam
    ([ID],[SubTeamName])
VALUES
    (44,  'Core'),
    (55,  'Extended')
;

CREATE TABLE Role
    (ID int, SubID int,  [Role] varchar(57))
;
INSERT INTO Role
    (ID, SubID, [Role])
VALUES
    (1,44, 'Sales'),
    (2,44, 'Finance'),
    (3,55,  'Development')
;

Текущий запрос:

SELECT b.DeptID, t.RoleID, r.Role, t.Member, s.SubTeamName 
FROM SubTeam s
LEFT JOIN Role r ON s.ID = r.SubID
LEFT JOIN TeamMember t ON r.ID = t.RoleID
LEFT JOIN Base b ON t.DeptID = b.DeptID
WHERE b.DeptID is not Null

Пожалуйста, также посмотрите это Скрипка

Возможно, я слишком усложняюсь, когда пытаюсь выступить с заявлением Союза, но я верю, что есть более простой способ, надеюсь, вы сможете мне его показать.

1 Ответ

0 голосов
/ 04 октября 2018

Объединение, вероятно, самое простое решение.Я заметил, что ваш текущий запрос слишком громоздок - вы используете левые соединения, но фактически меняете их на внутренние соединения с условием в предложении where.Кроме того, вы присоединяетесь к таблице Base, но нигде не используете ее, поэтому я внес небольшое изменение в ваш запрос.

Вот что я придумал:

SELECT t.DeptID, t.RoleID, r.Role, t.Member, s.SubTeamName 
FROM SubTeam s
JOIN Role r ON s.ID = r.SubID
JOIN TeamMember t ON r.ID = t.RoleID

UNION 

SELECT b.DeptId, NULL, 'Manager', [Manager], 'Core'
FROM Base As b 
JOIN TeamMember As t ON b.DeptId = t.DeptId

См. Демонстрационную версию скрипки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...