Рассчитать количество элементов и вернуть в виде столбца - PullRequest
0 голосов
/ 22 мая 2019

У меня есть таблица sql server 2014 с именем Machines с этими элементами

ID  || ProjectName       || MachineTypeID              || MachineName
----------------------------------------------------------------------
1   || project1          ||           1                || m1
1   || project2          ||           2                || m2
1   || project1          ||           2                || m3
1   || project2          ||           1                || m4
1   || project1          ||           2                || m5

И еще одна таблица с именем MachineTypes с этими элементами

Id || Title 
-------------------
1  || BigMachine
2  || SmallMachine

Все хотели написатьзапрос с таким выводом

ProjectName || BigMachineCount       || SmallMachineCount
----------------------------------------------------------
Project1    ||          1            ||        2
Project2    ||          1            ||        1

Я надеюсь, что это возможно

Ответы [ 2 ]

2 голосов
/ 22 мая 2019

РЕДАКТИРОВАТЬ (после того, как вы опубликовали пример)

Этот запрос должен дать вам желаемый результат.Я почти уверен, что это решение вашей проблемы уже где-то здесь @ SO.

Ссылка на sqlfiddle: http://www.sqlfiddle.com/#!9/e3ef7a/1

select ProjectName, 
       sum(case when MachineTypeID=1 then 1 else 0 end) as BigCount, 
       sum(case when MachineTypeID=2 then 1 else 0 end) as SmallCount
from Machines group by ProjectName
0 голосов
/ 22 мая 2019

Попробуйте этот запрос:

declare @t1 table(ID int, ProjectName varchar(10), MachineTypeID int, MachineName varchar(5));
insert into @t1 values
(1, 'project1',1, 'm1'),
(1, 'project2',2, 'm2'),
(1, 'project1',2, 'm3'),
(1, 'project2',1, 'm4'),
(1, 'project1',2, 'm5');

declare @t2 table (Id int, Title varchar(20));
insert into @t2 values
(1, 'BigMachine'),
(2, 'SmallMachine');

select ProjectName,
       max(case when MachineTypeId = 1 then cnt end) BigMachineCount,
       max(case when MachineTypeId = 2 then cnt end) SmallMachineCount
from (
    select ProjectName, MachineTypeId, count(*) cnt from @t1
    group by ProjectName, MachineTypeId
) a group by ProjectName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...