Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Выборка из нескольких таблиц  [new]
Marin_1a
Member

Откуда:
Сообщений: 125
Существует 4 таблицы:
INCIDENTS, REQUEST, CHANGE, PROBLEM


Из каждой необходимо вынести Группу и сколько было открыто и закрыто задач этой группой.

Колонка Группа в каждой таблице называется по-разному, к примеру:



в таблице INCIDENTS:

SELECT ASSIGNMENT
, OpenedCount = sum( iif( OPEN_TIME >= @StartDate and OPEN_TIME < @EndDate + 1, 1, 0 ) )
, ClosedCount = sum( iif( CLOSE_TIME >= @StartDate and OPEN_TIME < @EndDate + 1, 1, 0 ) )
FROM [dbo].[INCIDENTS]
GROUP BY ASSIGNMENT
ORDER BY ASSIGNMENT

в таблице CHANGE:

SELECT ASSIGN_DEPT
, OpenedCount = sum( iif( OPEN_TIME >= @StartDate and OPEN_TIME < @EndDate + 1, 1, 0 ) )
, ClosedCount = sum( iif( CLOSE_TIME >= @StartDate and OPEN_TIME < @EndDate + 1, 1, 0 ) )
FROM [dbo].[CHANGE]
GROUP BY ASSIGN_DEPT
ORDER BY ASSIGN_DEPT



в таблице PROBLEM:

SELECT ASSIGN
, OpenedCount = sum( iif( OPEN_TIME >= @StartDate and OPEN_TIME < @EndDate + 1, 1, 0 ) )
, ClosedCount = sum( iif( CLOSE_TIME >= @StartDate and OPEN_TIME < @EndDate + 1, 1, 0 ) )
FROM [dbo].[PROBLEM]
GROUP BY ASSIGN
ORDER BY ASSIGN

в таблице REQUEST:

SELECT ASSIGNM
, OpenedCount = sum( iif( OPEN_TIME >= @StartDate and OPEN_TIME < @EndDate + 1, 1, 0 ) )
, ClosedCount = sum( iif( CLOSE_TIME >= @StartDate and OPEN_TIME < @EndDate + 1, 1, 0 ) )
FROM [dbo].[REQUEST]
GROUP BY ASSIGNM
ORDER BY ASSIGNM



Результат должен выглядеть так:

Группа | INCIDENTS | CHANGE | REQUEST | PROBLEM |
----------------------------------------------------------------------------------------------------------------------------
| Открыто | Закрыто | Открыто | Закрыто | Открыто | Закрыто | Открыто | Закрыто |
--------------------------------------------------------------------------------------------------------------------------------------------
1Группа | 334 | 76 | 12 | 0 | 334 | 76 | 12 | 0 |
---------------------------------------------------------------------------------------------------------------------------------------------
2Группа | 23 | 4 | 67 | 9 | 23 | 2 | 45 | 9 |
---------------------------------------------------------------------------------------------------------------------------------------------
3Группа | 124 | 7 | 44 | 5 | 124 | 111 | 4 | 1 |
----------------------------------------------------------------------------------------------------------------------------------------------
18 апр 17, 08:01    [20409436]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из нескольких таблиц  [new]
Rankatan
Member

Откуда:
Сообщений: 250
select GrName , MAX(OpenedCountINCIDENTS ),MAX(ClosedCountINCIDENTS ),MAX(OpenedCountCHANGE  ), MAX(ClosedCountCHANGE  )
 from
(
SELECT GrName = ASSIGNMENT, 
, OpenedCountINCIDENTS = sum( iif( OPEN_TIME >= @StartDate and OPEN_TIME < @EndDate + 1, 1, 0 ) )
, ClosedCountINCIDENTS = sum( iif( CLOSE_TIME >= @StartDate and OPEN_TIME < @EndDate + 1, 1, 0 ) )
, OpenedCountCHANGE  = null 
, ClosedCountCHANGE  = null 
FROM [dbo].[INCIDENTS]
GROUP BY ASSIGNMENT
union all
SELECT GrName  = ASSIGN_DEPT
, OpenedCountINCIDENTS  as null 
, ClosedCountINCIDENTS  as null  
, OpenedCountCHANGE = sum( iif( OPEN_TIME >= @StartDate and OPEN_TIME < @EndDate + 1, 1, 0 ) )
, ClosedCountCHANGE = sum( iif( CLOSE_TIME >= @StartDate and OPEN_TIME < @EndDate + 1, 1, 0 ) )
FROM [dbo].[CHANGE]
GROUP BY ASSIGN_DEPT
) Tbl
group by GrName  
order by GrName  


Решений может быть много, это одно из них
18 апр 17, 13:15    [20410597]     Ответить | Цитировать Сообщить модератору
 Re: Выборка из нескольких таблиц  [new]
Marin_1a
Member

Откуда:
Сообщений: 125
Rankatan,

благодарю!
18 апр 17, 14:03    [20410797]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить