Довольно новый для Sql Server, и я ищу объединение двух запросов при совпадении двух столбцов. Например. Если столбец TimeByDay & ResourceName в запросе Емкость соответствует столбцу TimeByDay и ResourceName в запросе Allocation, затем вытащите значения в Capacity. Любые другие рекомендации приветствуются. Пожалуйста, дайте мне знать, если я не понимаю. Благодарю.SQL Server - Объединение запросов с соответствующими значениями в двух столбцах
QueryAllocation
ProjectName TaskName ResourceName ResourceManager AssignmentWork TimeBYDay
Project1 Task1 ResourceA ManagerA 8 2015-1-1
Project1 Task2 ResourceB ManagerB 7.5 2015-1-2
Project2 Task3 ResourceA ManagerA 4 2015-1-5
Project3 Task4 ResourceA ManagerA 1 2015-1-5
Project3 Task5 ResourceB ManagerB 2 2015-1-5
Project4 Task6 ResourceC ManagerB 2 2015-1-5
Запрос
SELECT
P.ProjectName,
T.TaskName,
R.ResourceName,
RUV.[Resource Manager],
ABD.AssignmentWork,
TBD.TimeByDay
FROM dbo.MSP_TimeByDay TBD
LEFT JOIN dbo.MSP_EpmAssignmentByDay ABD
ON TBD.TimeByday = ABD.TimeByDay
LEFT JOIN dbo.MSP_EpmAssignment A
ON ABD.AssignmentUID = A.AssignmentUID
LEFT JOIN dbo.MSP_EpmResource R
ON A.ResourceUID = R.ResourceUID
LEFT JOIN dbo.MSP_EpmResource_UserView RUV
ON R.ResourceUID = RUV.ResourceUID
LEFT JOIN dbo.MSP_EpmTask T
ON A.TaskUID = T.TaskUID
LEFT JOIN dbo.MSP_EpmProject P
ON T.ProjectUID = P.ProjectUID
WHERE NOT (ABD.AssignmentUID IS NULL)
QueryCapacity
ResourceName Capacity TimeByDay
ResourceA 6 2015-1-1
ResourceB 4 2015-1-2
ResourceA 8 2015-1-5
ResourceB 7 2015-1-5
ResourceC 7.5 2015-1-5
Запрос
SELECT
R2.ResourceName,
RBD2.Capacity,
TBD2.TimeByDay
FROM dbo.MSP_TimeByDay TBD2
LEFT JOIN dbo.MSP_EpmResourceByDay RBD2
ON TBD2.TimeByDay = RBD2.TimeByDay
LEFT JOIN dbo.MSP_EpmResource R2
ON RBD2.ResourceUID = R2.ResourceUID
WHERE NOT (RBD2.ResourceUID IS NULL)
Желательные Результаты
ProjectName TaskName ResourceName ResourceManager AssignmentWork TimeBYDay Capacity
Project1 Task1 ResourceA ManagerA 8 2015-1-1 6
Project1 Task2 ResourceB ManagerB 7.5 2015-1-2 4
Project2 Task3 ResourceA ManagerA 4 2015-1-5 8
Project3 Task4 ResourceA ManagerA 1 2015-1-5 8
Project3 Task5 ResourceB ManagerB 2 2015-1-5 7
Project4 Task6 ResourceC ManagerB 2 2015-1-5 7.5
Привет SimplyInk, я ценю помощь! Я попробовал ваш запрос, и он продолжал работать более пяти минут, поэтому я остановил его. Получено около 20 миллионов строк, в то время как распределение запросов создает около 900,00 строк. Поэтому вы, вероятно, правы в создании дубликатов, так как я использую LEFT JOIN. Как еще я могу вам помочь? Еще раз спасибо. –
Привет, Пол, для таблиц с соотношением 1: 1, вы должны иметь возможность делать JOIN вместо LEFT JOIN, чтобы устранить ненужные дубликаты. – SimplyInk
Если у вас есть доступ к MS SQL Server Management Studio, вы можете визуализировать взаимосвязь между таблицей и данными: щелкните правой кнопкой мыши таблицу dbo.MSP_TimeByDay, отредактируйте Top 200 строк, нажмите кнопку «Показать панель диаграммы (Ctrl + 1)» в запросе Панель инструментов конструктора. Нажмите кнопку «Добавить таблицу» на той же панели инструментов, чтобы добавить остальные таблицы по одному. Перед добавлением каждой таблицы обязательно настройте условие соединения. (Это интерфейс для просмотра и редактирования данных таблицы, поэтому не изменяйте данные или не используйте это в тестовой базе данных!) – SimplyInk