Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.117.216.229] |
|
Данный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ. |
Страницы: (15) « Первая ... 5 6 [7] 8 9 ... 14 15 все ( Перейти к последнему сообщению ) |
Сообщ.
#91
,
|
|
|
Вот полный текст запроса:
use PJM10 declare @d1 date declare @d2 date set @d1='01.01.2017' set @d2=GETDATE()+1 Select query1.Проект, query1.[руководитель проекта], round(Query2.Время,2) as Время, Round(Query3.Время_не_рук,2) as "Время не руководителя", round(query1.Сумма/Query2.Время,2) as "Стоимость часа 5\2" from (SELECT Project.FileAs as Проект, Employee.FileAs as "руководитель проекта", sum(PaymentDetail.Value) AS Сумма FROM project left JOIN Invoice ON Project.ID = Invoice.ProjectID left JOIN PaymentDetail ON PaymentDetail.InvoiceID = Invoice.ID left JOIN Payment ON PaymentDetail.PaymentID = Payment.ID left JOIN Employee on Project.ProjectManagerEmployeeID=Employee.ID WHERE (Payment.FileAs NOT LIKE N'%-1%') AND (Payment.FileAs NOT LIKE N'%-3%') AND Project.Date >=@d1 and Project.Date< @d2 Group by Project.FileAs,Employee.FileAs) as Query1, (SELECT Project.FileAs as Проект, CAST(SUM(TimeEntry.Duration) AS FLOAT)/60 AS Время FROM project left JOIN TimeEntry ON (Project.ID = TimeEntry.ProjectID) WHERE Project.Date >=@d1 and Project.Date< @d2 Group by Project.FileAs) as Query2, (SELECT Project.FileAs as Проект, CAST(SUM(TimeEntry.Duration) AS FLOAT)/60 AS Время_не_рук FROM project left JOIN TimeEntry ON (Project.ID = TimeEntry.ProjectID) and TimeEntry.EmployeeID<>Project.ProjectManagerEmployeeID WHERE Project.Date >=@d1 and Project.Date< @d2 Group by Project.FileAs) as Query3 where Query1.Проект=Query2.Проект=Query3.Проект Order by query1.Проект на это ругается where Query1.Проект=Query2.Проект=Query3.Проект а именно на второе равно(Неправильный синтаксис около конструкции "=".) |
Сообщ.
#92
,
|
|
|
По-моему, два последних подзапроса можно собрать в один. Будет что-то вроде
SELECT Project.FileAs as Проект , CAST(SUM(TimeEntry.Duration) AS FLOAT)/60 AS Время , CAST(SUM(CASE WHEN TimeEntry.EmployeeID<>Project.ProjectManagerEmployeeID THEN TimeEntry.Duration ELSE 0 END) AS FLOAT)/60 AS "Время не руководителя" FROM project left JOIN TimeEntry ON Project.ID = TimeEntry.ProjectID WHERE Project.Date >=@d1 and Project.Date< @d2 Group by Project.FileAs |
Сообщ.
#93
,
|
|
|
Опять нужна помощь:
use PJM10 declare @d1 date declare @d2 date set @d1='01.01.2017' set @d2=GETDATE()+1 SELECT Project.FileAs as Проект, Employee.FileAs as "руководитель проекта",Division.FileAs as Практика ,sum( PaymentDetail.Value) AS Сумма, CostCenter.FileAs as [Центр затрат], CAST(SUM(TimeEntry.Duration) AS FLOAT)/60 AS Время, CAST(SUM(CASE WHEN TimeEntry.EmployeeID<>Project.ProjectManagerEmployeeID THEN TimeEntry.Duration ELSE 0 END) AS FLOAT)/60 AS "Время не руководителя", CAST(SUM(CASE WHEN TimeEntry.DivisionID = 7 THEN TimeEntry.Duration ELSE 0 END) AS FLOAT)/60 AS "Время курьеров" , round(Сумма/Время,2) as "Стоимость часа 5\2" FROM TimeEntry left JOIN Project on TimeEntry.ProjectID=Project.ID left JOIN Invoice ON Project.ID = Invoice.ProjectID left JOIN PaymentDetail ON PaymentDetail.InvoiceID = Invoice.ID left JOIN Payment ON PaymentDetail.PaymentID = Payment.ID and (Payment.FileAs NOT LIKE N'%-1%') AND (Payment.FileAs NOT LIKE N'%-3%') left JOIN Employee on Project.ProjectManagerEmployeeID=Employee.ID left JOIN Division on Employee.DivisionID=Division.ID left JOIN CostCenter on Project.CostCenterID=CostCenter.ID WHERE TimeEntry.StartTime >=@d1 and TimeEntry.StartTime< @d2 group by Project.FileAs, Employee.FileAs, Division.FileAs , CostCenter.FileAs ругается на round(Сумма/Время,2) as "Стоимость часа 5\2" |
Сообщ.
#94
,
|
|
|
Вместо них поместить вычисляющие их выражения...
round(sum( PaymentDetail.Value)/CAST(SUM(TimeEntry.Duration) AS FLOAT)/60,2) as "Стоимость часа 5\2" |
Сообщ.
#95
,
|
|
|
Как-то странно считает:
Сумма Время Стоимость часа 5\2 160000,00 2 22,2222222222222 |
Сообщ.
#96
,
|
|
|
Скобки ещё нужны:
round( sum(PaymentDetail.Value) / (CAST(SUM(TimeEntry.Duration) AS FLOAT)/60) , 2) as "Стоимость часа 5\2" Или последнее деление заменить на умножение: round( sum(PaymentDetail.Value) / CAST(SUM(TimeEntry.Duration) AS FLOAT) * 60 , 2) as "Стоимость часа 5\2" |
Сообщ.
#97
,
|
|
|
|
Сообщ.
#98
,
|
|
|
Опять не могу элементарное победить:
use PJM10 declare @d1 date declare @d2 date set @d1='01.01.2018' set @d2='15.01.2018' select Employee.FileAs, count(TimeEntry.FileAs) as "Количество задач", sum(CASE WHEN TimeEntry.Overtime=1 THEN 1 ELSE 0 END) as "Сложных задач",/*sum( CAST(isnull(Category.FileAs,0) as float))--,*/Category.FileAs from TimeEntry left join Employee on TimeEntry.EmployeeID = Employee.ID LEFT JOIN DocumentCategory ON TimeEntry.DocumentID = DocumentCategory.DocumentID LEFT JOIN Category ON DocumentCategory.CategoryID = Category.ID where TimeEntry.DivisionID = 7 and TimeEntry.StartTime >=@d1 and TimeEntry.StartTime< @d2 group by Employee.FileAs, Category.FileAs FileAs Количество задач Сложных задач Category.FileAs Курьер Белогаров 21 0 NULL Курьер Костин 4 0 NULL Курьер Белогаров 4 0 0 Курьер Белогаров 2 0 0,5 Курьер Белогаров 1 1 135 Курьер Белогаров 1 0 14 Курьер Белогаров 1 1 220 Курьер Белогаров 5 0 4 Курьер Белогаров 2 0 5 Я хочу Category.FileAs конвертировать в число и сложить через CAST(isnull(Category.FileAs,0) as float)): use PJM10 declare @d1 date declare @d2 date set @d1='01.01.2018' set @d2='15.01.2018' select Employee.FileAs, count(TimeEntry.FileAs) as "Количество задач", sum(CASE WHEN TimeEntry.Overtime=1 THEN 1 ELSE 0 END) as "Сложных задач",sum( CAST(isnull(Category.FileAs,0) as float))--,*/Category.FileAs from TimeEntry left join Employee on TimeEntry.EmployeeID = Employee.ID LEFT JOIN DocumentCategory ON TimeEntry.DocumentID = DocumentCategory.DocumentID LEFT JOIN Category ON DocumentCategory.CategoryID = Category.ID where TimeEntry.DivisionID = 7 and TimeEntry.StartTime >=@d1 and TimeEntry.StartTime< @d2 group by Employee.FileAs--, Category.FileAs Сообщение 8114, уровень 16, состояние 5, строка 9 Ошибка при преобразовании типа данных nvarchar к float. Что ему ещё нужно? |
Сообщ.
#99
,
|
|
|
Судя по показанному результату Employee.FileAs = "Курьер". Не подскажешь, что должно получиться после его декремента?
|
Сообщ.
#100
,
|
|
|
Немного не тот столбец, смотри тот где
Null, null, 0, 0.5, 135, 14, 220, 4, 5 Если вместо float поставить int, ошибка невозмлжно преобразовать 0.5, а с типом float вообще такая ошибка как в прошлом посте |
Сообщ.
#101
,
|
|
|
Думаю, что акцесс ожидает точку разделителем целой и дробной части числа, а ты ему скармливаешь запятую.
|
Сообщ.
#102
,
|
|
|
MIF
Похоже на то если просто CAST('0,5' as float) сделать, то ошибку вываливает |
Сообщ.
#103
,
|
|
|
Попробую заиенить запятую точкой в Category.Fileas
|
Сообщ.
#104
,
|
|
|
Так работает, но как-то монструозно выглядит )
sum( CAST(isnull(REPLACE(Category.FileAs,',','.'),0) as float)) |
Сообщ.
#105
,
|
|
|
Может в самом аксессе можно сменить локаль с американской на русскую?
|