На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! информация о разделе
user posted imageДанный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ.

Модераторы: Akina
Страницы: (15) « Первая ... 5 6 [7] 8 9 ...  14 15 все  ( Перейти к последнему сообщению )  
> Помогите с запросом
    Вот полный текст запроса:
    ExpandedWrap disabled
      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.Проект а именно на второе равно(Неправильный синтаксис около конструкции "=".)
      По-моему, два последних подзапроса можно собрать в один. Будет что-то вроде

      ExpandedWrap disabled
        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
        Опять нужна помощь:
        ExpandedWrap disabled
          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


        ругается на
        ExpandedWrap disabled
          round(Сумма/Время,2)  as "Стоимость часа 5\2"
        На Сумма/Время, т.к. выше они объявлены как суммы неких данных. Как их верно сюда запихнуть?
          Вместо них поместить вычисляющие их выражения...
          ExpandedWrap disabled
            round(sum( PaymentDetail.Value)/CAST(SUM(TimeEntry.Duration) AS FLOAT)/60,2)  as "Стоимость часа 5\2"
            Как-то странно считает:
            ExpandedWrap disabled
              Сумма    Время    Стоимость часа 5\2
              160000,00      2    22,2222222222222
            Сообщение отредактировано: ^D^ima -
              Скобки ещё нужны:
              ExpandedWrap disabled
                round( sum(PaymentDetail.Value) / (CAST(SUM(TimeEntry.Duration) AS FLOAT)/60) , 2) as "Стоимость часа 5\2"

              Или последнее деление заменить на умножение:
              ExpandedWrap disabled
                round( sum(PaymentDetail.Value) / CAST(SUM(TimeEntry.Duration) AS FLOAT) * 60 , 2) as "Стоимость часа 5\2"
              Сообщение отредактировано: Akina -
                :thanks:
                  Опять не могу элементарное победить:
                  ExpandedWrap disabled
                    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


                  ExpandedWrap disabled
                    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)):
                  ExpandedWrap disabled
                    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.

                  Что ему ещё нужно?
                  Сообщение отредактировано: ^D^ima -
                    Судя по показанному результату Employee.FileAs = "Курьер". Не подскажешь, что должно получиться после его декремента?
                      Немного не тот столбец, смотри тот где
                      Null, null, 0, 0.5, 135, 14, 220, 4, 5

                      Если вместо float поставить int, ошибка невозмлжно преобразовать 0.5, а с типом float вообще такая ошибка как в прошлом посте
                      Сообщение отредактировано: ^D^ima -
                        Думаю, что акцесс ожидает точку разделителем целой и дробной части числа, а ты ему скармливаешь запятую.
                          MIF
                          Похоже на то если просто CAST('0,5' as float) сделать, то ошибку вываливает
                            Попробую заиенить запятую точкой в Category.Fileas
                              Так работает, но как-то монструозно выглядит )
                              ExpandedWrap disabled
                                sum( CAST(isnull(REPLACE(Category.FileAs,',','.'),0) as float))
                                Может в самом аксессе можно сменить локаль с американской на русскую?
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (15) « Первая ... 5 6 [7] 8 9 ...  14 15 все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0469 ]   [ 16 queries used ]   [ Generated: 25.04.24, 13:48 GMT ]