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

Откуда:
Сообщений: 125
Здравствуйте!
Отчет должен всех ASSIGNEE выводить в одной колонке,а значения по ним во второй.
При использовании UNION ALL он несколько раз выносит одного и того же ASSIGNEE.
Как сделать общий результат по 3 таблицам?
Спасибо!
select ASSIGNED_TO,ANSWER = ROUND(CAST(AVG(CAST(Q.ANSWER AS DEC))AS NVARCHAR),2)
from  [dbo].[SCRELATIONM1] S
INNER JOIN  [dbo].[REQUESTM1] R  ON R.[NUMBER]  = S.[DEPEND]
LEFT JOIN [dbo].[QUESTIONNAIREM1] Q  ON R.[NUMBER] = Q.[OBJECT_ID]
WHERE ASSIGNED_TO IS NOT NULL AND ANSWER IS NOT NULL
AND (SUBMIT_DATE  >=  (@StartDate) and SUBMIT_DATE < (@EndDate + 1))
GROUP BY ASSIGNED_TO

select ASSIGNEE,ANSWER = ROUND(CAST(AVG(CAST(Q.ANSWER AS DEC))AS NVARCHAR),2)
from  [dbo].[QUESTIONNAIREM1] Q 
INNER JOIN  [dbo].[INCIDENTSM1] IM  ON IM.[INCIDENT_ID]  = Q.[OBJECT_ID]
WHERE ASSIGNEE IS NOT NULL AND ANSWER IS NOT NULL
AND (OPEN_TIME  >=  (@StartDate) and OPEN_TIME < (@EndDate + 1))
GROUP BY ASSIGNEE

select ASSIGNEE_NAME,ANSWER = ROUND(CAST(AVG(CAST(Q.ANSWER AS DEC))AS NVARCHAR),2)
from  [dbo].[SCRELATIONM1] S
INNER JOIN  [dbo].[PROBSUMMARYM1] P  ON P.[NUMBER]  = S.[DEPEND]
LEFT JOIN [dbo].[QUESTIONNAIREM1] Q  ON P.[NUMBER] = Q.[OBJECT_ID]
WHERE ASSIGNEE_NAME IS NOT NULL AND ANSWER IS NOT NULL
AND (OPEN_TIME  >=  (@StartDate) and OPEN_TIME < (@EndDate + 1))
GROUP BY ASSIGNEE_NAME
26 май 17, 09:46    [20513546]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к 3 таблицам  [new]
Добрый Э - Эх
Guest
Marin_1a,

сгруппировать объединенные UNION ALL-ом запросы ещё раз?

select ASSIGNEE , sum(...)
  from (
         тут три селекта, объединенные через UNION ALL
       ) v
26 май 17, 09:56    [20513569]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к 3 таблицам  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20183
Marin_1a
При использовании UNION ALL он несколько раз выносит одного и того же ASSIGNEE.

Но ANSWER-то у этих записей разный? так что сами записи - не дубликаты... как решить, что оставить в выходном наборе, а что удалить?

PS. А как у Вас ROUND() относится к тому, что ей скармливается NVARCHAR?
26 май 17, 10:21    [20513687]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к 3 таблицам  [new]
Marin_1a
Member

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

answer - средняя оценка.
Один специалист может дважды повториться, так как вероятно,что будет результат по нему как в 1,так и во 2 таблице.
А нужно именно среднее answer по всем таблицам

К сообщению приложен файл. Размер - 5Kb
26 май 17, 11:15    [20513970]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к 3 таблицам  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20183
Marin_1a
нужно именно среднее answer по всем таблицам
Значит, сначала надо объединить записи таблиц, и только потом считать среднее. Т.е.
SELECT sum_table.person, AVG(sum_table.answer) avg_answer
FROM (
    SELECT person, answer
    FROM tableset1
  UNION ALL
    SELECT person, answer
    FROM tableset2
  UNION ALL
    SELECT person, answer
    FROM tableset3
) sum_table
26 май 17, 11:42    [20514082]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к 3 таблицам  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20183
пардон, забыл
GROUP BY sum_table.person
26 май 17, 11:42    [20514091]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к 3 таблицам  [new]
Marin_1a
Member

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

Круто!спасибо :)
26 май 17, 13:37    [20514668]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к 3 таблицам  [new]
Marin_1a
Member

Откуда:
Сообщений: 125
в продолжении этой темы
Попыталась для другого типичного отчета использовать эту же схему запроса, но тут выходит ошибка:
"Operand data type varchar is invalid for AVG operator"
Подскажите как правильно оформить дату?
Спасибо!

select v.ASSIGNMENT,v.ASSIGNEE_NAME, AVG(v.TM) avg_answer
from(
select ASSIGNMENT, ASSIGNEE_NAME,
TM = CAST(AVG(DATEDIFF(MINUTE, OPEN_TIME, INF_TOWORK_TIME))/1440 as varchar(10)) + ':'+ CONVERT(VARCHAR, CAST(AVG(CAST(CAST (INF_TOWORK_TIME as datetime) - CAST( OPEN_TIME as datetime)as float )) as datetime),108)
from [dbo].[PROBSUMMARYM1] P
INNER JOIN [dbo].[SCRELATIONM1] SC on P.[NUMBER] = SC.[SOURCE]
WHERE INF_TOWORK_TIME IS NOT NULL
and OPEN_TIME >= (@StartDate) and OPEN_TIME < ((@EndDate) + 1)
AND SC.TYPE = 'Escalate From'
AND ASSIGNMENT IS NOT NULL
AND SC.[SOURCE] IS NOT NULL
GROUP BY ASSIGNMENT, ASSIGNEE_NAME

UNION ALL

select ASSIGNED_GROUP, ASSIGNED_TO,
TM = CAST(AVG(DATEDIFF(MINUTE, SUBMIT_DATE, INF_TOWORK_TIME))/1440 as varchar(10)) + ':'+ CONVERT(VARCHAR, CAST(AVG(CAST(CAST (INF_TOWORK_TIME as datetime) - CAST( SUBMIT_DATE as datetime)as float )) as datetime),108)
from [dbo].[REQUESTM1] R
INNER JOIN [dbo].[SCRELATIONM1] SC on R.[NUMBER] = SC.[SOURCE]
WHERE INF_TOWORK_TIME IS NOT NULL
and SUBMIT_DATE >= (@StartDate) and SUBMIT_DATE < ((@EndDate) + 1)
AND SC.TYPE = 'Escalate From'
AND ASSIGNED_GROUP IS NOT NULL
AND SC.[SOURCE] IS NOT NULL
GROUP BY ASSIGNED_GROUP, ASSIGNED_TO

)v
GROUP BY v.ASSIGNMENT,v.ASSIGNEE_NAME
29 май 17, 06:18    [20518802]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к 3 таблицам  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30745
Marin_1a
Попыталась для другого типичного отчета использовать эту же схему запроса, но тут выходит ошибка:
"Operand data type varchar is invalid for AVG operator"
Подскажите как правильно оформить дату?
Для строк и дат нельзя вычислить "среднее".
Нужно поменять алгоритм.
29 май 17, 07:53    [20518847]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к 3 таблицам  [new]
aleks2
Guest
alexeyvg
Marin_1a
Попыталась для другого типичного отчета использовать эту же схему запроса, но тут выходит ошибка:
"Operand data type varchar is invalid for AVG operator"
Подскажите как правильно оформить дату?
Для строк и дат нельзя вычислить "среднее".
Нужно поменять алгоритм.


Это тредстатерше не дано.
Рази ты сам.
29 май 17, 08:43    [20518917]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить