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

Откуда:
Сообщений: 9
Всем привет. Помогите пожалуйста решить проблему. Есть 2 Таблицы - Таблица А - таблица проблем с столбцами:
Дата создания отчета о проблеме | Дата принятия в работу | Дата закрытия проблемы | Логин закрывавшего

и Таблица логинов сотрудников L со столбцами Логин и ФИО

Мне нужно вывести ФИО сотрудника,
количество проблем которые он решил за месяц,
Количество проблем на решение которых он потратил 30 или меньше минут
Количество проблем на решение которых он потратил более 30 минут

По отдельности я могу подсчитать эти количества, но вот собрать все эти данные в один запрос у меня не получается, я хотел создать несколько SETов, а после вывести результаты их подсчетов, но успеха в этом не достиг. Буду очень признателен за помощь.

 Declare @month Datetime;
  SET @month= '2013-07-01 00:00:00'; -- Начало периода расчета за месяц
  SELECT [Логин закрывавшего], COUNT (A.id) as 'SLA_GOOD'
  FROM [База отчетов проблем] A
  Join [База логинов] L on Upper(A.Логин закрывавшего)=Upper(L.Логин сотрудника) collate SQL_Latin1_General_CP1251_CI_AS
  where year(A.ins_date) = year(@month) AND month(A.Дата создания отчета о проблеме) = month(@month)
  and DATEDIFF(MINUTE, A.Дата создания отчета о проблеме, A.Дата закрытия проблемы)<=10
  GROUP BY L.ФИО сотрудника
16 июл 13, 18:17    [14574833]     Ответить | Цитировать Сообщить модератору
 Re: Выборка в 2 столбца из источника 1 столбец  [new]
Гость333
Member

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

Примерно так:
SELECT [ФИО Сотрудника],
       SUM(CASE WHEN ВремяРешения <= 30 минут THEN 1 ELSE 0) AS [Количество проблем на решение которых он потратил 30 или меньше минут],
       SUM(CASE WHEN ВремяРешения > 30 минут THEN 1 ELSE 0) AS [Количество проблем на решение которых он потратил более 30 минут]
FROM ...
WHERE ...
GROUP BY [ФИО Сотрудника]
16 июл 13, 18:32    [14574921]     Ответить | Цитировать Сообщить модератору
 Re: Выборка в 2 столбца из источника 1 столбец  [new]
Dart_Limon
Member

Откуда:
Сообщений: 9
Спасибо за, совет, но дело в том, что данные в столбцах указаны как дата и время. Функция SUM не работает по вашему примеру. :((
16 июл 13, 18:44    [14574970]     Ответить | Цитировать Сообщить модератору
 Re: Выборка в 2 столбца из источника 1 столбец  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Dart_Limon
Спасибо за, совет, но дело в том, что данные в столбцах указаны как дата и время. Функция SUM не работает по вашему примеру. :((
А кто вам советовал суммировать время?
Вы внимательно запрос то посмотрите.
16 июл 13, 18:48    [14574981]     Ответить | Цитировать Сообщить модератору
 Re: Выборка в 2 столбца из источника 1 столбец  [new]
Dart_Limon
Member

Откуда:
Сообщений: 9
Может я что-то не так делаю, но у меня запрос все равно не запускается. :(
Я считаю ВремяРешения через DATEDIFF(MINUTE, A.Дата создания отчета о проблеме, A.Дата закрытия проблемы)<=30
У меня нет в таблице выделеного столбца где указаны такие данные. По этому при указании SUM запрос не отрабатывает и ругается на SUM.
17 июл 13, 10:20    [14576493]     Ответить | Цитировать Сообщить модератору
 Re: Выборка в 2 столбца из источника 1 столбец  [new]
=)8)
Guest
Dart_Limon, попробуйте так:
select ...
   sum(case when ВремяРешения <= 30 then 1 else 0 end) быстро,
   sum(case when ВремяРешения > 30 then 1 else 0 end) медленно,
   ...
from ...
cross apply(select ВремяРешения = 
   DATEDIFF(MINUTE, 
      A.[Дата создания отчета о проблеме], 
      A.[Дата закрытия проблемы]))ВремяРешения
where...
group by ...
17 июл 13, 10:44    [14576670]     Ответить | Цитировать Сообщить модератору
 Re: Выборка в 2 столбца из источника 1 столбец  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2415
Dart_Limon
Может я что-то не так делаю, но у меня запрос все равно не запускается. :(
.

ваш запрос? или тот который вам Гость333 написал? текст ошибки может быть приведете?
17 июл 13, 11:07    [14576806]     Ответить | Цитировать Сообщить модератору
 Re: Выборка в 2 столбца из источника 1 столбец  [new]
Ramis
Member

Откуда:
Сообщений: 99
Dart_Limon,
Так то суммируется не время а количество удовлетворяющее условию.
17 июл 13, 11:13    [14576839]     Ответить | Цитировать Сообщить модератору
 Re: Выборка в 2 столбца из источника 1 столбец  [new]
Dart_Limon
Member

Откуда:
Сообщений: 9
Мне кажется что было бы проще сделать несколько SET, а потом SELECT уже играться как что где представлять, но у меня SET не работает с DATEDIFF. Написал такой запрос

И вы забываеет одну вещь, что в базе проблем сотни посторяющихся логинов, а мне нужно чтобы ФИО отображалось одного человека отображалось один раз, по этому я и делал Join с базой сотрудников.
17 июл 13, 12:55    [14577558]     Ответить | Цитировать Сообщить модератору
 Re: Выборка в 2 столбца из источника 1 столбец  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Мда... ну, придётся тогда разжевать и в рот положить:
Declare @month Datetime;

SET @month = '2013-07-01 00:00:00'; -- Начало периода расчета за месяц

SELECT [Логин закрывавшего],
       SUM(CASE WHEN DATEDIFF(MINUTE, A.[Дата создания отчета о проблеме], A.[Дата закрытия проблемы]) <= 30 THEN 1 ELSE 0 END) AS [Быстро],
       SUM(CASE WHEN DATEDIFF(MINUTE, A.[Дата создания отчета о проблеме], A.[Дата закрытия проблемы]) > 30 THEN 1 ELSE 0 END) AS [Медленно]
FROM [База отчетов проблем] A
     Join [База логинов] L on Upper(A.[Логин закрывавшего])=Upper(L.[Логин сотрудника]) collate SQL_Latin1_General_CP1251_CI_AS
where year(A.ins_date) = year(@month) AND month(A.[Дата создания отчета о проблеме]) = month(@month)
GROUP BY L.[ФИО сотрудника]
17 июл 13, 13:01    [14577619]     Ответить | Цитировать Сообщить модератору
 Re: Выборка в 2 столбца из источника 1 столбец  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Это я взял запрос из первого поста и модифицировал... только сейчас заметил, что там ерунда какая-то в GROUP BY:
SELECT [Логин закрывавшего],
...
GROUP BY L.[ФИО сотрудника]

Ну, с этим сами разберётесь.
17 июл 13, 13:03    [14577634]     Ответить | Цитировать Сообщить модератору
 Re: Выборка в 2 столбца из источника 1 столбец  [new]
=)8)
Guest
Чуть более точно:
Declare @month Datetime = '2013-07-01 00:00:00'; -- Начало периода расчета за месяц

SELECT L.[ФИО сотрудника],
   COUNT(*) ВсегоЗадач,
   COUNT(Время_Решения.ВремяРешения) ВсегоРешенныхЗадач,
   SUM(1-SIGN(Время_Решения.ВремяРешения/31)) AS [В т.ч. решено быстро],
   SUM(SIGN(Время_Решения.ВремяРешения/31)) AS [В т.ч. решено медленно]
FROM [База отчетов проблем] A
Join [База логинов] L on Upper(A.[Логин закрывавшего])=Upper(L.[Логин сотрудника]) collate SQL_Latin1_General_CP1251_CI_AS
cross apply (select 
   DATEDIFF(MINUTE, A.[Дата создания отчета о проблеме], A.[Дата закрытия проблемы])
   ) Время_Решения(ВремяРешения)
where year(A.ins_date) = year(@month) AND month(A.[Дата создания отчета о проблеме]) = month(@month)
GROUP BY L.[ФИО сотрудника]
17 июл 13, 13:53    [14578033]     Ответить | Цитировать Сообщить модератору
 Re: Выборка в 2 столбца из источника 1 столбец  [new]
=)8)
Guest
и кстати, зачем UPPER при CI в collate SQL_Latin1_General_CP1251_CI_AS ?
17 июл 13, 14:00    [14578079]     Ответить | Цитировать Сообщить модератору
 Re: Выборка в 2 столбца из источника 1 столбец  [new]
Dart_Limon
Member

Откуда:
Сообщений: 9
=)8)
Чуть более точно:
Declare @month Datetime = '2013-07-01 00:00:00'; -- Начало периода расчета за месяц

SELECT L.[ФИО сотрудника],
   COUNT(*) ВсегоЗадач,
   COUNT(Время_Решения.ВремяРешения) ВсегоРешенныхЗадач,
   SUM(1-SIGN(Время_Решения.ВремяРешения/31)) AS [В т.ч. решено быстро],
   SUM(SIGN(Время_Решения.ВремяРешения/31)) AS [В т.ч. решено медленно]
FROM [База отчетов проблем] A
Join [База логинов] L on Upper(A.[Логин закрывавшего])=Upper(L.[Логин сотрудника]) collate SQL_Latin1_General_CP1251_CI_AS
cross apply (select 
   DATEDIFF(MINUTE, A.[Дата создания отчета о проблеме], A.[Дата закрытия проблемы])
   ) Время_Решения(ВремяРешения)
where year(A.ins_date) = year(@month) AND month(A.[Дата создания отчета о проблеме]) = month(@month)
GROUP BY L.[ФИО сотрудника]



Ответ просто супер, спасибо огромное всем за помощь, запрос заработал!
17 июл 13, 15:02    [14578522]     Ответить | Цитировать Сообщить модератору
 Re: Выборка в 2 столбца из источника 1 столбец  [new]
Dart_Limon
Member

Откуда:
Сообщений: 9
Извеняюсь за мой тупняк, в SQL я аматор. Меня просто сбивало с толку (ВремяРешения) я бил голову над тем откуда вы взяли этот столбец, если я его не указывал. Теперь я понялчто это такое. )))) Ещё раз спасибо огромное всем!!! Вы мои кумиры SQL. ))))
17 июл 13, 15:03    [14578527]     Ответить | Цитировать Сообщить модератору
 Re: Выборка в 2 столбца из источника 1 столбец  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
=)8)
Чуть более точно:
Declare @month Datetime = '2013-07-01 00:00:00'; -- Начало периода расчета за месяц

SELECT L.[ФИО сотрудника],
   COUNT(*) ВсегоЗадач,
   COUNT(Время_Решения.ВремяРешения) ВсегоРешенныхЗадач,
   SUM(1-SIGN(Время_Решения.ВремяРешения/31)) AS [В т.ч. решено быстро],
   SUM(SIGN(Время_Решения.ВремяРешения/31)) AS [В т.ч. решено медленно]
FROM [База отчетов проблем] A
Join [База логинов] L on Upper(A.[Логин закрывавшего])=Upper(L.[Логин сотрудника]) collate SQL_Latin1_General_CP1251_CI_AS
cross apply (select 
   DATEDIFF(MINUTE, A.[Дата создания отчета о проблеме], A.[Дата закрытия проблемы])
   ) Время_Решения(ВремяРешения)
where year(A.ins_date) = year(@month) AND month(A.[Дата создания отчета о проблеме]) = month(@month)
GROUP BY L.[ФИО сотрудника]
Но выделенная строка - это же ужас что такое!
17 июл 13, 15:24    [14578682]     Ответить | Цитировать Сообщить модератору
 Re: Выборка в 2 столбца из источника 1 столбец  [new]
Dart_Limon
Member

Откуда:
Сообщений: 9
=)8),

Подскажи пожалуйста, а как добавить условие что этой же схеме, чтобы посчитать те проблемы которые были созданы сегодня, но закрыты на следующий день после 12:00?
17 июл 13, 16:46    [14579299]     Ответить | Цитировать Сообщить модератору
 Re: Выборка в 2 столбца из источника 1 столбец  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Dart_Limon
созданы сегодня, но закрыты на следующий день после 12:00?

Это как? У вас хранится информация о завтрашней дате закрытия проблем?
17 июл 13, 16:56    [14579387]     Ответить | Цитировать Сообщить модератору
 Re: Выборка в 2 столбца из источника 1 столбец  [new]
Dart_Limon
Member

Откуда:
Сообщений: 9
Гость333,

Нет, я просто пример неудачно указал. Извеняюсь. Отчет о проблеме появился вчера, а решена проблема была только сегодня после 12:00.
Что-что, а вот с такой компоновкой по датам у меня в голове полная каша.
17 июл 13, 17:05    [14579443]     Ответить | Цитировать Сообщить модератору
 Re: Выборка в 2 столбца из источника 1 столбец  [new]
=)8)
Guest
Declare @month Datetime = '20130701 00:00:00'; -- Начало периода расчета за месяц

declare @dtf datetime, @dtt datetime
set @dtf=DATEADD(DAY,1-DAY(@month),CONVERT(datetime,CONVERT(date, @month))) -- первая секунда месяца
set @dtt=DATEADD(SECOND,-1,DATEADD(MONTH,1,@dtf)) -- последняя секунда месяца

SELECT L.[ФИО сотрудника],
   COUNT(*) ВсегоЗадач,
   SUM(Решение.Решено) ВсегоРешенныхЗадач,
   ISNULL(SUM(1-Решение.Долго),0) AS [В т.ч. решено быстро],
   ISNULL(SUM(Решение.Долго),0) AS [В т.ч. решено медленно],
   SUM(Решение.Просрочено) AS [В т.ч. просрочено]
FROM [База отчетов проблем] A
Join [База логинов] L 
   on A.[Логин закрывавшего]=L.[Логин сотрудника] collate SQL_Latin1_General_CP1251_CI_AS
cross apply (select 
   DATEADD(HOUR,12,DATEADD(day,1,CONVERT(datetime,CONVERT(date,A.[Дата создания отчета о проблеме]))))
   )Завтра(Полдень)
cross apply (select 
   Долго = case 
      when A.[Дата закрытия проблемы]<=Завтра.Полдень
      then SIGN(DATEDIFF(MINUTE, A.[Дата создания отчета о проблеме], A.[Дата закрытия проблемы])/31)
   end,
   Просрочено = case when A.[Дата закрытия проблемы]>Завтра.Полдень then 1 else 0 end,
   Решено = case when A.[Дата закрытия проблемы] is null then 0 else 1 end
   ) Решение
where A.ins_date between @dtf and @dtt
GROUP BY L.[ФИО сотрудника]
17 июл 13, 18:47    [14579971]     Ответить | Цитировать Сообщить модератору
 Re: Выборка в 2 столбца из источника 1 столбец  [new]
Dart_Limon
Member

Откуда:
Сообщений: 9
=)8),

Спасибо огромнейшее.
18 июл 13, 14:31    [14583967]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить