2017-02-15 11 views
0

Прежде всего, я хочу извиниться, если я задаю совершенно неправильный вопрос - я начинающий, когда дело доходит до SQL, и я не уверен, как достичь своей цели, но я предполагаю, что подпросы - это то, с чем мне нужно работать.Как использовать два подзапроса для вытягивания значений из двух таблиц? T-SQL

У меня есть две таблицы, одна с данными временной карты (Таблица 1), а другая с данными проекта высокого уровня (Таблица 2).

Таблица 1:

+------+------------------+---------------+-------------+ 
| code | work_description | resource_name | total_hours | 
+------+------------------+---------------+-------------+ 
| 101 | Time Reporting | Jane Doe  |   5 | 
| 101 | Time Reporting | Jane Doe  |   7 | 
| 101 | Time Reporting | Jane Doe  |   9 | 
| 201 | Time Reporting | Joe Smith  |   2 | 
| 201 | Time Reporting | Joe Smith  |   4 | 
| 201 | Time Reporting | Joe Smith  |   6 | 
+------+------------------+---------------+-------------+ 

Таблица 2:

+------+------------+----------------+ 
| code | project_id |  descr  | 
+------+------------+----------------+ 
| 100 |  100 | Project A  | 
| 101 |  100 | Time Reporting | 
| 102 |  100 | Milestones  | 
| 103 |  100 | Planning  | 
| 200 |  200 | Project B  | 
| 201 |  200 | Time Reporting | 
| 202 |  200 | Milestones  | 
| 203 |  200 | Planning  | 
+------+------------+----------------+ 

В таблице 2, когда столбец код равен колонке project_id, DESCR показывает название проекта. Мне нужно вытащить всю таблицу 1 в дополнение к имени проекта, которое соответствует каждой строке.

Что мне нужно:

+-----------+------+------------------+---------------+-------------+ 
| descr | code | work_description | resource_name | total_hours | 
+-----------+------+------------------+---------------+-------------+ 
| Project A | 101 | Time Reporting | Jane Doe  |   5 | 
| Project A | 101 | Time Reporting | Jane Doe  |   7 | 
| Project A | 101 | Time Reporting | Jane Doe  |   9 | 
| Project B | 201 | Time Reporting | Joe Smith  |   2 | 
| Project B | 201 | Time Reporting | Joe Smith  |   4 | 
| Project B | 201 | Time Reporting | Joe Smith  |   6 | 
+-----------+------+------------------+---------------+-------------+ 

Мой процесс, хотя в том, что сначала я должен найти PROJECT_ID, которая относится к каждой строке в таблице 1. Затем, я мог бы использовать это значение для сопоставления с PROJECT_ID в таблице 2, поэтому я мог вытащить название проекта из колонки descr

Вот что у меня есть. Это правильно вытягивает идентификатор проекта (я не знаю, является ли это лучшей практикой). Я пробовал несколько разных подзапросов для имени проекта, но я еще не смог сделать это правильно.

SELECT 
    (SELECT t2.code WHERE t1.code=t2.code) as found_project_id, 
    t2.descr, 
    t1.code, 
    t1.work_description, 
    t1.resource_name, 
    t1.total_hours 
FROM Table1 as t1 
    INNER JOIN Table2 as t2 ON t1.code=t2.code 

Так что мой вопрос, как я могу использовать подзапросы (или любой другой метод), чтобы вытащить все из таблицы 1, в дополнение к именам проектов?

+0

Возможно, вы захотите исследовать _correlated subquery_. Хотя кажется, что здесь 'JOIN' более уместен, коррелированный подзапрос - еще один полезный инструмент. – HABO

ответ

1

Здесь не нужен подзапрос. Простое соединение достаточно, так как внутреннее соединение уже выполняет то, что вы пытаетесь сделать с подзапросом:

SELECT 
    proj.descr, 
    t2.code, 
    t1.work_description, 
    t1.resource_name, 
    t1.total_hours 
FROM table2 t2 

JOIN table1 t1 ON 
    t1.code = t2.code 
JOIN table2 proj ON 
    proj.code = t2.project_id 
+0

Этот запрос извлекает значение из t2.descr, где t1.code = t2.code (aka «Time Reporting» из таблицы 2), но я ищу имя проекта, которое также находится в столбце descr, но происходит только тогда, когда t2.code = t2.project_id. – user7571220

+0

@ user7571220 Я отредактировал мой ответ, чтобы исправить это – pquest

+0

Это сработало отлично. Большое вам спасибо за вашу помощь! – user7571220

 Смежные вопросы

  • Нет связанных вопросов^_^