Как ВНУТРИ СОЕДИНИТЬ условные данные из двух таблиц с SQL - PullRequest
0 голосов
/ 15 сентября 2018

У меня есть две таблицы;

одна содержит столбец ENTITYID и столбец, представляющий, являются ли задания постоянными или нет (1 - полная).

Другая таблица содержит соответствующие идентификаторыи столбец, в котором указано, в какой стране базируются эти рабочие места.

Моя задача - найти все рабочие места, которые заняты полный рабочий день, в таблице1, а затем использовать эту информацию, чтобы найти страны, в которых они находятся, из таблицы2.Но для второй части это должен быть подсчет количества рабочих мест для каждой страны.то есть.10 Япония, 5 США, 2 Великобритания.Не Япония, Япония, Япония и т. Д.

То, что у меня есть до сих пор:

SELECT entityid FROM dbo.Jobs WHERE contracthours = 1;

Это возвращает все идентификаторы заданий (entityid), которые являются штатными (= 1).Но как мне теперь взять эти данные и использовать их, чтобы найти их во второй таблице.

И в таблице 2:

SELECT COUNT(ID), ISNULL(country, 'No Country')
FROM dbo.JobLocations
GROUP BY Country;

Это возвращает задания с подсчетом каждого задания, итакже заменяет задания с не связанной страной на «Нет страны» (часть моего требования к задаче).

Что мне нужно сделать, это взять то, что у меня есть, из первого запроса на table1 и каким-то образом INNER присоединиться к нему и вернутьрезультат, аналогичный второму запросу, используемому в таблице 2.

редактирование: я должен отметить, что ENTITYID из таблицы 1 равен JOBID в таблице 2

На некоторых рисунках первое изображение показывает идентификаторы таблицы1 и контрактные часы (1 - полный рабочий день)), Второе изображение показывает идентификаторы таблицы2 и соответствующую страну.

Table1

table2

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018
SELECT COUNT(ID), ISNULL(country, 'No Country')
FROM dbo.JobLocations
where JOBID in (SELECT entityid FROM dbo.Jobs WHERE contracthours = 1)
GROUP BY Country;
0 голосов
/ 15 сентября 2018

Если я правильно понимаю, вы можете попытаться использовать count с оконной функцией get count, затем выполните join на ENTITYID и JOBID.

SELECT * 
FROM dbo.Jobs t1 inner join (
    SELECT JOBID,
            COUNT(ID) over(partition by Country order by Country) cnt, 
            ISNULL(country, 'No Country') country
    FROM dbo.JobLocations
) t2 on t2.JOBID = t1.entityid
WHERE t1.contracthours = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...