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

Модераторы: Akina
Страницы: (15) « Первая ... 7 8 [9] 10 11 ...  14 15 все  ( Перейти к последнему сообщению )  
> Помогите с запросом
    Цитата ^D^ima @
    Что-то монструозное получилось, но вродебы как рабочее.
    так не понял как делать

    Пять страниц на форуме? :scratch: И всего шесть таблиц связи, для отчета? Не проще(быстрее) функциями это сделать?
    Сообщение отредактировано: Bas -
      Bas
      На самом деле 2 страницы. Я начал первую страницу с 0 знанием SQL. Постепенно я начал получать опыт. Если я сталкиваюсь с трудностью пытаюсь сделать сам, опираясь на опыт, ищу в интернете и только потом лезу на форум. Спасибо Akina и MIF что помогают разбираться в непростом для меня деле. В данной ветке я задавал вопросы трудностям с 6 запросам, так что не думай что 1 запрос обсасываем 9 страниц :)

      Добавлено
      Цитата Bas @
      Не проще(быстрее) функциями это сделать?

      Может быть. Но база не наша а стороннего ПО. Я просто оттуда дергаю данные. Не хочется ее захламлять своими поделиями, тем более она раз в 3 месяца обновляется.
        ExpandedWrap disabled
          use PJM10
          declare @d1 date
          declare @d2 date
          set @d1='01.01.2018'
          set @d2='01.02.2018'--GETDATE()+1
           
          Select project.FileAs, count(TaskRequest.id) as 'Количество выполненных задач'
          From
          TaskRequest
          left join Project on Project.ID = TaskRequest.ProjectID
           
          where TaskRequest.DueTime >=@d1 and  TaskRequest.DueTime<@d2 and (Project.FileAs = 'Задачи ОАиФ' or Project.FileAs ='Задачи Оценка' or Project.FileAs ='Задачи  ОКГ' or Project.FileAs like '%АО ОКГ%')
          and TaskRequest.PercentComplete=1
          group by project.FileAs

        Результат в файле

        Как-то можно объединить все Project.FileAs like '%АО ОКГ%' в 1 строчку? Или придется делать подзапрос или union all?
        Прикреплённый файлПрикреплённый файлsql.png (12,01 Кбайт, скачиваний: 718)
          Так ближе:
          ExpandedWrap disabled
            use PJM10
            declare @d1 date
            declare @d2 date
            set @d1='01.01.2018'
            set @d2='01.02.2018'--GETDATE()+1
             
            Select
            case when project.FileAs not like '%АО ОКГ%' then project.FileAs else 'АО ОКГ' end , count(TaskRequest.id) as 'Количество выполненных задач'
            From
            TaskRequest
            left join Project on Project.ID = TaskRequest.ProjectID
             
            where TaskRequest.DueTime >=@d1 and  TaskRequest.DueTime<@d2 and (Project.FileAs = 'Задачи ОАиФ' or Project.FileAs ='Задачи Оценка' or Project.FileAs ='Задачи  ОКГ' or Project.FileAs like '%АО ОКГ%')
            and TaskRequest.PercentComplete=1
            group by project.FileAs

          Прикреплённый файлПрикреплённый файлsql.png (8,61 Кбайт, скачиваний: 688)

          Добавлено
          Он group by project.FileAs не выполняет потому что select самым последним выполняется после сбора таблицы? А нельзя ли как-то прямо в from где-то менять названия? Т.е. тот-же case как в select сделать?

          Добавлено
          Так работает, но можно красивее сделать?
          ExpandedWrap disabled
            use PJM10
            declare @d1 date
            declare @d2 date
            set @d1='01.01.2018'
            set @d2='01.02.2018'--GETDATE()+1
             
            Select
            query1.Проект , sum(query1.[Количество выполненных задач])
             
            From(
            select case when project.FileAs not like '%АО ОКГ%' then project.FileAs else 'АО ОКГ' end  as Проект, count(TaskRequest.id) as 'Количество выполненных задач'
            From
            TaskRequest
            left join Project on Project.ID = TaskRequest.ProjectID
             
            where TaskRequest.DueTime >=@d1 and  TaskRequest.DueTime<@d2 and
            (Project.FileAs = 'Задачи ОАиФ' or Project.FileAs ='Задачи Оценка' or Project.FileAs ='Задачи  ОКГ' or Project.FileAs like '%АО ОКГ%')
            and TaskRequest.PercentComplete=1
            group by project.FileAs) as query1
            group by Проект
            ExpandedWrap disabled
              Select
              case when project.FileAs not like '%АО ОКГ%' then project.FileAs else 'АО ОКГ' end , count(TaskRequest.id) as 'Количество выполненных задач'
              ..;
              group by case when project.FileAs not like '%АО ОКГ%' then project.FileAs else 'АО ОКГ' end
              Цитата MIF @
              group by case when project.FileAs not like '%АО ОКГ%' then project.FileAs else 'АО ОКГ' end

              шикарно :)
                Как-то можно в поле select, выражение присвоенное через AS ещё раз использовать в том-же Select?
                Типа этого:
                Select Что_то_там As q1,
                q1*2 as q2
                А то у меня выдает ошибку:
                https://yadi.sk/i/b2aDszRH3UPKaw
                  Нельзя. Поле не существует, пока рекордсет не создан.
                    Цитата ^D^ima @
                    в поле select, выражение присвоенное через AS ещё раз использовать в том-же Select?

                    Зависит от диалекта.

                    Например, в MS Access это делается именно так, как ты пишешь.
                    В MySQL это будет так: Select @q1:=Что_то_там as q1, @q1*2 as q2
                    В MS SQL... не знаю, можно или нет.

                    И так далее - нестандарт везде свой.
                      можно q1 вподзапросе вычислить.
                        Как проще like и in совместить?
                        ExpandedWrap disabled
                          Project.ContractNumber like in('ЮК%','АО%','АС%','ЮКПРС%','Б%','Иное ПРС%','ЮК%','СОЮ%','Включение%','ПК%','И%','Л%','М%','Р%','Иное НР%')


                        а то выдает ошибку. Не хочется через or повторять бесконечно Project.ContractNumber like 'ЮК%' or Project.ContractNumber like 'АО%' и.т.д.
                          Используй RLike и собери всё в один шаблон.
                            Цитата Akina @
                            Используй RLike и собери всё в один шаблон.

                            А разве в MS SQL это есть?
                              В MS SQL тоже есть регэкспы.
                                Запиши строки поиска в отдельную таблицу.
                                Добавь JOIN в свой запрос:
                                ExpandedWrap disabled
                                  JOIN MyTable mt ON Project.ContractNumber like mt.MyField

                                Ну и еше надо добавить DISTINCT или GROUP BY, чтобы исключить повторы.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (15) « Первая ... 7 8 [9] 10 11 ...  14 15 все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0452 ]   [ 20 queries used ]   [ Generated: 28.03.24, 15:54 GMT ]