Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
Добрый Э - Эх
Guest |
Marin_1a, сгруппировать объединенные UNION ALL-ом запросы ещё раз? select ASSIGNEE , sum(...) from ( тут три селекта, объединенные через UNION ALL ) v |
26 май 17, 09:56 [20513569] Ответить | Цитировать Сообщить модератору |
Akina Member Откуда: Зеленоград, Москва, Россия Сообщений: 20970 |
Но ANSWER-то у этих записей разный? так что сами записи - не дубликаты... как решить, что оставить в выходном наборе, а что удалить? PS. А как у Вас ROUND() относится к тому, что ей скармливается NVARCHAR? |
||
26 май 17, 10:21 [20513687] Ответить | Цитировать Сообщить модератору |
Marin_1a Member Откуда: Сообщений: 125 |
Akina, answer - средняя оценка. Один специалист может дважды повториться, так как вероятно,что будет результат по нему как в 1,так и во 2 таблице. А нужно именно среднее answer по всем таблицам К сообщению приложен файл. Размер - 5Kb |
26 май 17, 11:15 [20513970] Ответить | Цитировать Сообщить модератору |
Akina Member Откуда: Зеленоград, Москва, Россия Сообщений: 20970 |
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] Ответить | Цитировать Сообщить модератору |
Akina Member Откуда: Зеленоград, Москва, Россия Сообщений: 20970 |
пардон, забылGROUP BY sum_table.person |
26 май 17, 11:42 [20514091] Ответить | Цитировать Сообщить модератору |
Marin_1a Member Откуда: Сообщений: 125 |
Akina, Круто!спасибо :) |
26 май 17, 13:37 [20514668] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31782 |
Нужно поменять алгоритм. |
||
29 май 17, 07:53 [20518847] Ответить | Цитировать Сообщить модератору |
aleks2
Guest |
Это тредстатерше не дано. Рази ты сам. |
||||
29 май 17, 08:43 [20518917] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |