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

Модераторы: Pr0[)!9Y, Akina, JoeUser
Страницы: (10) « Первая ... 7 8 [9] 10  все  ( Перейти к последнему сообщению )  
> Помогите с запросом
    Цитата ^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 Кбайт, скачиваний: 65)
        "Воля - это то, что заставляет тебя побеждать, когда твой рассудок говорит тебе, что ты повержен" Карлос Кастанеда
          Так ближе:
          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 Кбайт, скачиваний: 58)

          Добавлено
          Он 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... не знаю, можно или нет.

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


                        а то выдает ошибку. Не хочется через or повторять бесконечно Project.ContractNumber like 'ЮК%' or Project.ContractNumber like 'АО%' и.т.д.
                        "Воля - это то, что заставляет тебя побеждать, когда твой рассудок говорит тебе, что ты повержен" Карлос Кастанеда
                          Используй RLike и собери всё в один шаблон.
                          Есть претензии ко мне как к модератору? читайте Правила, разделы 5 и 6, и действуйте соответственно.
                          Есть претензии ко мне как к участнику? да ради бога.
                          Не нравятся мои ответы? не читайте их.
                          В общем, берегите себя. Нервные клетки не восстанавливаются.
                            Цитата Akina @
                            Используй RLike и собери всё в один шаблон.

                            А разве в MS SQL это есть?
                            "Воля - это то, что заставляет тебя побеждать, когда твой рассудок говорит тебе, что ты повержен" Карлос Кастанеда
                              В MS SQL тоже есть регэкспы.
                              Есть претензии ко мне как к модератору? читайте Правила, разделы 5 и 6, и действуйте соответственно.
                              Есть претензии ко мне как к участнику? да ради бога.
                              Не нравятся мои ответы? не читайте их.
                              В общем, берегите себя. Нервные клетки не восстанавливаются.
                                Запиши строки поиска в отдельную таблицу.
                                Добавь JOIN в свой запрос:
                                ExpandedWrap disabled
                                  JOIN MyTable mt ON Project.ContractNumber like mt.MyField

                                Ну и еше надо добавить DISTINCT или GROUP BY, чтобы исключить повторы.
                                Мои религиозные убеждения не позволяют мне комментировать код.
                                Моё мировоззренье таково: в программе комментария ни одного!
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script Execution time: 0,1630 ]   [ 19 queries used ]   [ Generated: 21.05.18, 13:00 GMT ]