Объединение двух частей кода SQL, которые работают в одном запросе. Изучение SQL Server - PullRequest
0 голосов
/ 25 июня 2019

Я пишу запрос для объединения данных из двух таблиц, но из одной таблицы я хочу, чтобы данные выводились по разным группам

Пробное соединение, Наборы группировки, Подзапрос, Объединение всех

Запрос: Комуизвлекать среднюю стоимость в расчете на одно место на класс (сумма затрат на набор на одно место) / количество наймов на одно место * количество наймов на одно место в классе

Мне трудно объединить два запроса - мне было интересно, могли бы выпомогите мне.

Таблицы:

Найм:

Location        Hiring Start Date   Hiring Complete Date    Grade
United Kingdom  08/08/2018          29/12/2018              C
United Kingdom  24/10/2018          29/12/2018              B
United Kingdom  24/10/2018          05/01/2019              B
United Kingdom  04/05/2018          15/01/2019              B
United States   16/08/2018          09/02/2019              D
India           09/08/2018          02/03/2019              B
India           15/12/2018          02/03/2019              B
United Kingdom  22/12/2018          02/03/2019              C
United Kingdom  26/12/2018          02/03/2019              B
United Kingdom  26/12/2018          02/03/2019              B
United Kingdom  07/01/2019          02/03/2019              A
United States   06/11/2018          03/03/2019              D
United States   23/01/2019          03/03/2019              A

Стоимость найма:

Location        Item            Cost
United Kingdom  Advertisement   640
United Kingdom  Recruiter       926
United Kingdom  Interviews      833
United Kingdom  Admin           211
United States   Advertisement   540
United States   Recruiter       1122
United States   Interviews      934
United States   Admin           192
India           Advertisement   211
India           Recruiter       543
India           Interviews      321
India           Admin           102

Вот две части кода, которые работают отдельно, ноЯ хотел бы объединить их в один кусок кода

SELECT COUNT(*) AS HiresperLocationGrade,
       Location,
       Grade,
       (SELECT SUM(Cost) AS HireCost
        FROM HireCosts
        WHERE Location = Hiring.Location) AS RecruitingCostsperLocation
FROM Hiring
GROUP BY Location,
         Grade;

Это правильно дает мне Location, Grade, HiresperLocationperGrade, RecruitingCostsperlocation

SELECT COUNT(*) AS HiresperLocation
FROM Hiring
GROUP BY Location;

Это правильно дает мне Hiresperlocation

Моя проблема в том, что из Таблицы найма я хочу нанять сотрудников для каждого местоположения в классе, а также нанять сотрудников для каждого местоположения, в котором я хочу Местоположение, класс, Hiresperlocationpergrade, HiresperLocation, RecruitingCostsperLocation будет выводиться

+--------------------------+----------------+-------+-----------------+------------------+
| HiresperlocationperGrade |    Location    | Grade | RecruitingCosts | Hiresperlocation |
+--------------------------+----------------+-------+-----------------+------------------+
|                        2 | India          | A     |            1177 |               28 |
|                       20 | India          | B     |            1177 |               28 |
|                        4 | India          | C     |            1177 |               28 |
|                        2 | India          | D     |            1177 |               28 |
|                       17 | United Kingdom | A     |            2610 |              109 |
|                       44 | United Kingdom | B     |            2610 |              109 |
|                       24 | United Kingdom | C     |            2610 |              109 |
|                       15 | United Kingdom | D     |            2610 |              109 |
|                        8 | United Kingdom | E     |            2610 |              109 |
|                        1 | United Kingdom | F     |            2610 |              109 |
|                       10 | United States  | A     |            2788 |               33 |
|                        4 | United States  | B     |            2788 |               33 |
|                        3 | United States  | C     |            2788 |               33 |
|                       11 | United States  | D     |            2788 |               33 |
|                        3 | United States  | E     |            2788 |               33 |
|                        2 | United States  | F     |            2788 |               33 |
+--------------------------+----------------+-------+-----------------+------------------+

1 Ответ

0 голосов
/ 25 июня 2019

Вот решение с использованием левого соединения в подзапросе:

SELECT COUNT(*) AS HiresperLocationGrade,
       H.Location,
       Grade,
       (
          SELECT SUM(Cost) AS HireCost
          FROM HireCosts
          WHERE Location = H.Location
       ) AS RecruitingCostsperLocation,
       HiresperLocation
FROM Hiring H
LEFT JOIN
       (
             SELECT Location,
                    COUNT(*) AS HiresperLocation
             FROM HireCosts
             GROUP BY Location
      ) HL ON HL.Location = H.Location
GROUP BY H.Location,
         Grade,
         HiresperLocation;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...