Как объединить несколько строк в одну строку в SQL - PullRequest
0 голосов
/ 02 мая 2019

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

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

Мой текущий код выглядит так:

SELECT
    count(*) as [Number of Employees], Gender, Job
FROM 
    @table
WHERE 
    Job like '%Associate%'
GROUP BY grouping sets
    ((Job), (Gender))

в результирующих наборах есть строка для каждого типа связанного задания, и я пытаюсь выяснить, как объединить их под одной строкой под именем «связать»

Ответы [ 4 ]

0 голосов
/ 02 мая 2019

Вот простой способ

SELECT SUM(numberofemployees) AS total,
    Gender,
    CASE WHEN JobTitle LIKE '%Engineer%' THEN 'Engineer' ELSE JobTitle END AS JobTitle
FROM @table
GROUP BY Gender,
    CASE WHEN JobTitle LIKE '%Engineer%' THEN 'Engineer' ELSE JobTitle END 

ВЫХОД :

total   Gender  JobTitle
5       F       NULL
3       M       NULL
8       NULL    Engineer
0 голосов
/ 02 мая 2019

Хорошо, так что вы хотите, вы можете попробовать это, потому что

SELECT SUM(a.[Number of Employees]) AS Value1, a.Gender , a.JobGroup FROM (
SELECT 'Engineer' AS JobGroup, COUNT(*) AS [Number of Employees], Gender, JobTitle FROM HumanResources.Employee WHERE JobTitle LIKE '%Engineer%' GROUP BY grouping sets ((JobTitle), (Gender))) a
GROUP BY a.Gender,a.JobGroup
0 голосов
/ 02 мая 2019

Проверьте этот скрипт. Кроме того, это также вернет значение «Инженер» в столбце «Название должности» для F & M. Но если вам требуется иметь значение NULL, в скрипте требуется некоторая корректировка.

Примечание: подзапрос только для лучшего понимания. Этого также можно достичь за один запрос.

SELECT COUNT(*),
GENDER,
JobTitle 
FROM
(    
    SELECT 
    JobTitle,
    Gender, 
    CASE 
        WHEN JobTitle like '%Engineer%' THEN 'Engineer'
        ELSE JobTitle
    END AS JobTitle
    FROM HumanResources.EmployeeFROM 
)A
WHERE A.JobTitle = 'Engineer' 
GROUP BY GENDER,JobTitle
0 голосов
/ 02 мая 2019

Добавить это:

SELECT 
    count(*) as [Number of Employees],
    Gender, 
    JobTitle 
FROM 
    HumanResources.Employee 
WHERE 
    JobTitle like '%Engineer%' 
Group by grouping sets
    ((JobTitle), (Gender)) 
HAVING 
    COUNT(*)>=3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...