Объединить похожие данные для сущностей - PullRequest
0 голосов
/ 03 ноября 2019

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

Как показано в базовом выводе из таблицы Temp, я работаю над представлением 2-го и 3-го столбцов с соответствующимик действительному количеству. Я пытаюсь запросить временную таблицу, чтобы представить Отдел вместе со счетчиком каждой операционной системы, используемой в отделе, а также счетом Tech_Company.

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

/************ Table Creation ****************/
CREATE TABLE #TEMP1 
(
    Department VARCHAR(20),
    Operating_System VARCHAR(20),
    Tech_Company VARCHAR(20) 
)

INSERT INTO #TEMP1 VALUES 
('Marketing','Windows','DellLaptop'),
('Sales','IOS','Macbook'),
('Financial','IOS','Macbook'),
('Human Resources','Andorid','DellLaptop'),
('Human Resources','Andorid','DellLaptop'),
('Human Resources','Andorid','Lenovo'),
('PR','IOS','Macbook'),
('Buying','Windows','HP'),
('Buying','Linux','Asus'),
('Buying','Windows','Asus'),
('Buying','Linux','DellLaptop'),
('R&D','Linux', 'DellLaptop')
GO

/************ End of Table Creation ****************/
SELECT * FROM #TEMP1

DROP TABLE #TEMP1

Basic Output:

Department  Operating_System    Tech_Company
Marketing        Windows          DellLaptop
Sales              IOS             Macbook
Financial          IOS             Macbook
Human Resources    Andorid        DellLaptop
Human Resources    Andorid        DellLaptop
Human Resources    Andorid         Lenovo
PR                 IOS            Macbook
Buying             Windows          HP
Buying             Linux          Asus
Buying             Windows        Asus
Buying             Linux          DellLaptop
R&D                Linux          DellLaptop

Что я пробовал:

SELECT Department, case when Operating_System = 'Windows' THEN COUNT(Department) ELSE '' END AS 'Windows',
                   case when Operating_System = 'IOS' THEN COUNT(Department) ELSE '' END AS 'IOS',
                   case when Operating_System = 'Andorid' THEN COUNT(Department) ELSE '' END AS 'Andorid',
                   case when Operating_System = 'Linux' THEN COUNT(Department) ELSE '' END AS 'Linux',
                   case when Tech_Company = 'DellLaptop' THEN COUNT(Department) ELSE '' END AS 'DellLaptop',
                   case when Tech_Company = 'Macbook' THEN COUNT(Department) ELSE '' END AS 'Macbook',
                   case when Tech_Company = 'HP' THEN COUNT(Department) ELSE '' END AS 'HP',
                   case when Tech_Company = 'Lenovo' THEN COUNT(Department) ELSE '' END AS 'Lenovo',
                   case when Tech_Company = 'Asus' THEN COUNT(Department) ELSE '' END AS 'Asus'
FROM #TEMP1
GROUP BY Department,Operating_System,Tech_Company

Output: 
Department      Windows IOS Andorid Linux DellLaptop Macbook HP Lenovo Asus
Buying             0     0     0      1        0        0    0     0    1
Buying             0     0     0      1        1        0    0     0    0
Buying             1     0     0      0        0        0    0     0    1
Buying             1     0     0      0        0        0    1     0    0
Financial          0     1     0      0        0        1    0     0    0
Human Resources    0     0     2      0        2        0    0     0    0
Human Resources    0     0     1      0        0        0    0     1    0
Marketing          1     0     0      0        1        0    0     0    0
PR                 0     1     0      0        0        1    0     0    0
R&D                0     0     0      1        1        0    0     0    0
Sales              0     1     0      0        0        1    0     0    0

Новая схема должна бытьследующим образом:

    Col 1    Col 2   Col 3   Col 4   Col 5   Col 6   Col 7    Col8  Col9 Col10
Department  Windows   IOS   Andorid  Linux  DellLap Macbook  Lenovo   HP  Asus
  Buying       2       0       0       2       1       0        0      1    2 
 Financial     0       1       0       0       0       1        0      0    0
 Human Res     0       0       3       0       2       0        1      0    0 
 Marketing     1       0       0       0       1       0        0      0    0
    PR         0       1       0       0       0       1        0      0    0
    R&D        0       0       0       1       1       0        0      0    0
   Sales       0       1       0       0       0       1        0      0    0

1 Ответ

1 голос
/ 03 ноября 2019

Похоже, вам нужен простой сводный запрос:

SELECT
    Department,
    COUNT(CASE WHEN Operating_System = 'Windows' THEN 1 END) AS Windows,
    COUNT(CASE WHEN Operating_System = 'IOS' THEN 1 END) AS Windows,
    COUNT(CASE WHEN Operating_System = 'Android' THEN 1 END) AS Android,
    COUNT(CASE WHEN Operating_System = 'Linux' THEN 1 END) AS Linux,
    COUNT(CASE WHEN Tech_Company = 'DellLaptop' THEN 1 END) AS DellLaptop,
    COUNT(CASE WHEN Tech_Company = 'Macbook' THEN 1 END) AS Macbook,
    COUNT(CASE WHEN Tech_Company = 'Lenovo' THEN 1 END) AS Lenovo,
    COUNT(CASE WHEN Tech_Company = 'HP' THEN 1 END) AS HP,
    COUNT(CASE WHEN Tech_Company = 'Asus' THEN 1 END) AS Asus
FROM #TEMP1
GROUP BY
    Department;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...