Здравствуйте!
Нужно сгруппировать данные по дням недели. Поблема в том, что день недели можно получить только использовав колонку стекстом SQL. По таким полям группировка не делается. Запрос формируется без Group By.
SELECT
DATENAME(dw,StartDate) AS [WeekDay],
SUM([tbl_Document].[Value]) AS [Value]
FROM
[dbo].[tbl_Document] AS [tbl_Document]
WHERE(NOT [tbl_Document].[StartDate] IS NULL AND
CAST(CONVERT(VARCHAR(8), [tbl_Document].[StartDate], 112) AS DATETIME)>=:StartDate
AND CAST(CONVERT(VARCHAR(8), [tbl_Document].[StartDate], 112) AS DATETIME)=:EndDate)
В результате ошибка: Столбец "dbo.tbl_Document.StartDate" недопустим в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY
Нравится
Как вариант, обернуть это еще в один запрос: во внутреннем - определяем день недели, во внешнем - группируем по нему и вычисляем сумму:
SELECT [WeekDay], SUM([Value])
FROM
(SELECT
DATENAME(dw,StartDate) AS [WeekDay],
[tbl_Document].Value AS [Value]
FROM
[dbo].[tbl_Document] AS [tbl_Document]
WHERE(NOT [tbl_Document].[StartDate] IS NULL AND
CAST(CONVERT(VARCHAR(8), [tbl_Document].[StartDate], 112) AS DATETIME)>=:StartDate
AND CAST(CONVERT(VARCHAR(8), [tbl_Document].[StartDate], 112) AS DATETIME)<=:EndDate)
) TEMP
GROUP BY [WeekDay]
"Тюльпа Владимир" написал:Нужно сгруппировать данные по дням недели. Поблема в том, что день недели можно получить только использовав колонку стекстом SQL.
Владимир, попробуйте сделать представление на уровне БД и в конфигурации таблицу с таким же именем, но не сохраняйте структуру. И после этого ядро сможет работать с колонкой, которая будет содержать день недели, как с обычной.
Если в StartDate именно дата, а не дата/время, то попробуйте использовать в запросе таблицу tbl_BaseCalendar (в ней даты с 1950 по 2050 годы):
SELECT SUM(D.Value), BC.WeekDayNumber FROM tbl_Document D JOIN tbl_BaseCalendar BC ON D.StartDate = BC.[Date] GROUP BY BC.WeekDayNumber
Хотя, даже, если дата/время, то никто не мешает написать CustomSQLFilter.
1. А что мешает использовать группировку по datediff(day, 0, StartDate) вместо convert?
2. Для того что бы не использовать group by следует воспользоваться pratition by. Проблема с перечислением колонок после group by отпадает.
Здравствуйте Александр!
Вид я создал, а таблицу с тем же именем в Администраторе создать не могу, так как такой объект уже есть в базе, а сохранить таблицу без стуктуры тоже нельзя, нет такой возможности. Работать с видом запрос, созданный в Администраторе не может.
"Тюльпа Владимир" написал:Здравствуйте Александр!
сохранить таблицу без стуктуры тоже нельзя, нет такой возможности
Владимир, не совсем вас понимаю. Какая у вас версия?
Здравствуйте Александр
Версия 3.2.1.14. Я смотрел демо-версию 3.4. Там бы этот вопрос не стоял.
Владимир, вам необходимо обратится в поддержку для получения обновлений до более новой версии 3.2.1
"Тюльпа Владимир" написал:Вид я создал, а таблицу с тем же именем в Администраторе создать не могу, так как такой объект уже есть в базе, а сохранить таблицу без стуктуры тоже нельзя, нет такой возможности. Работать с видом запрос, созданный в Администраторе не может.
Сначала создаем и сохраняем сервис таблицы в Terrasoft. Потом идем в базу, удаляем там получившуюся таблицу и создаем вьюху с тем же именем и теми же полями. На вьюху даем права на чтение всем нужным пользователям
Дальше обращаемся из TS запросами к нашей "таблице"
Спасибо!
Обновление сделал, нужная мне функция теперь есть. Вопрос снят.