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

Модераторы: Pr0[)!9Y, Akina, JoeUser
Страницы: (12) « Первая ... 10 11 [12]  все  ( Перейти к последнему сообщению )  
> Помогите с запросом
    ExpandedWrap disabled
      select fio, number
      from
      (select fio, number, row_number() over (partition by fio order by number asc) rn
      from table) x
      where rn < 3
    Сообщение отредактировано: JoeUser -
    Есть претензии ко мне как к модератору? читайте Правила, разделы 5 и 6, и действуйте соответственно.
    Есть претензии ко мне как к участнику? да ради бога.
    Не нравятся мои ответы? не читайте их.
    В общем, берегите себя. Нервные клетки не восстанавливаются.
      Akina, Мощно!!!

      Как можно из этого запроса:
      ExpandedWrap disabled
        select   Employee.FileAs, project.FileAs, TaskRequest.FileAs
        ,Cast( REVERSE(substring(REVERSE(TaskRequest.FileAs), PatIndex('%[0-9]%', REVERSE(TaskRequest.FileAs)), PatIndex('%[^0-9]%', substring(REVERSE(TaskRequest.FileAs), PatIndex('%[0-9]%', REVERSE(TaskRequest.FileAs)), len(TaskRequest.FileAs)))-1))as int)
        ,row_number() over (partition by Employee.FileAs, project.FileAs order by Cast( REVERSE(substring(REVERSE(TaskRequest.FileAs), PatIndex('%[0-9]%', REVERSE(TaskRequest.FileAs)), PatIndex('%[^0-9]%', substring(REVERSE(TaskRequest.FileAs), PatIndex('%[0-9]%', REVERSE(TaskRequest.FileAs)), len(TaskRequest.FileAs)))-1))as int)  DESC) as rn
         
         
        from
        TaskRequest
        left join Project on TaskRequest.ProjectID=Project.ID
        Left join Employee on Employee.ID=TaskRequest.EmployeeID
        Left join CostCenter on CostCenter.id= Project.CostCenterID
         
        Where TaskRequest.EmployeeID is not null and TaskRequest.FileAs like N'%Отгрузка%' and TaskRequest.FileAs like N'%[%]' and year(TaskRequest.DueTime)=year(@d1)


      избавиться от записи 2-х раз одной и той-же формулы
      ExpandedWrap disabled
        Cast( REVERSE(substring(REVERSE(TaskRequest.FileAs), PatIndex('%[0-9]%', REVERSE(TaskRequest.FileAs)), PatIndex('%[^0-9]%', substring(REVERSE(TaskRequest.FileAs)
      "Воля - это то, что заставляет тебя побеждать, когда твой рассудок говорит тебе, что ты повержен" Карлос Кастанеда
        Ещё такой вопрос:
        Результат отчета:

        Прикреплённый файлПрикреплённый файлSQL2.png (43,54 Кбайт, скачиваний: 37)

        Как мне сделать группировку по 'сотрудник' и 'проект' и при этом найти разницу процентов?
        Может быть как одна выдача процентов группы 'сотрудник' и 'проект', так и две.

        В прошлые разы было предложено решение сделать
        ExpandedWrap disabled
          max(query1.Процент)-min(query1.Процент)
          Group by query1.Сотрудник,query1.Проект

        Но если у группы 'сотрудник' и 'проект' одна выдача, то max(query1.Процент)-min(query1.Процент) даст 0, т.к. max(query1.Процент) и min(query1.Процент) будут совпадать.

        Нужно как-то найти количество записей в группах и сделать условие что если кол-во таких групп 2 то берется max(query1.Процент)-min(query1.Процент) в противном случаи только query1.Процент
        "Воля - это то, что заставляет тебя побеждать, когда твой рассудок говорит тебе, что ты повержен" Карлос Кастанеда
          Цитата ^D^ima @
          избавиться от записи 2-х раз одной и той-же формулы

          Ну я же уже давал ссылку на CTE...

          Цитата ^D^ima @
          если у группы 'сотрудник' и 'проект' одна выдача, то max(query1.Процент)-min(query1.Процент) даст 0, т.к. max(query1.Процент) и min(query1.Процент) будут совпадать.

          Нужно как-то найти количество записей в группах и сделать условие что если кол-во таких групп 2 то берется max(query1.Процент)-min(query1.Процент) в противном случаи только query1.Процент

          ExpandedWrap disabled
            CASE WHEN MAX(field) = MIN(field)
                 THEN MAX(field)
                 ELSE MAX(field) - MIN(field)
            END
          Есть претензии ко мне как к модератору? читайте Правила, разделы 5 и 6, и действуйте соответственно.
          Есть претензии ко мне как к участнику? да ради бога.
          Не нравятся мои ответы? не читайте их.
          В общем, берегите себя. Нервные клетки не восстанавливаются.
            Цитата Akina @
            CASE WHEN MAX(field) = MIN(field)
                 THEN MAX(field)
                 ELSE MAX(field) - MIN(field)
            END

            гениально! не додумался до такой простой вещи. Уже хотел ноль везде дописывать, респектую. :thanks:
            "Воля - это то, что заставляет тебя побеждать, когда твой рассудок говорит тебе, что ты повержен" Карлос Кастанеда
              Не пойму алгоритмически как решить задачу:
              У нас есть таблица
              ExpandedWrap disabled
                Дата, Сумма
                01.01.2018 100руб
                01.02.2018 100руб
                01.03.2018 100руб
                01.04.2018 100руб
                01.05.2018 100руб


              Мы хотим взять все суммы с даты1 по дату2, но при условии что есть запись на дату2. Т.е. если записи на дату 2 нет, то не нужно вообще ничего брать

              Select 'Сумма'
              From table1
              Where 'Дата'>=@дата1 and 'Дата'<=@дата2 and ???

              Где-то нужно case впихнуть, не пойму где

              Можно было бы в Select впихнуть, но хотелось бы что-бы вообще не было строк выдачи, да и в select неясно что писать
              "Воля - это то, что заставляет тебя побеждать, когда твой рассудок говорит тебе, что ты повержен" Карлос Кастанеда
                ExpandedWrap disabled
                  AND SUM(CASE WHEN 'Дата'=@дата2 THEN 1 ELSE 0 END)>0
                Есть претензии ко мне как к модератору? читайте Правила, разделы 5 и 6, и действуйте соответственно.
                Есть претензии ко мне как к участнику? да ради бога.
                Не нравятся мои ответы? не читайте их.
                В общем, берегите себя. Нервные клетки не восстанавливаются.
                  не заработало:
                  Цитата
                  Статистическое выражение не может использоваться в предложении WHERE, если оно не содержится во вложенном запросе предложения HAVING или в списке выбора, и столбец, подвергаемый статистической обработке, не является внешней ссылкой.


                  Добавлено
                  Но в Select такая конструкция приемлема, спасибо.
                  "Воля - это то, что заставляет тебя побеждать, когда твой рассудок говорит тебе, что ты повержен" Карлос Кастанеда
                    Цитата ^D^ima @
                    Но в Select такая конструкция приемлема, спасибо.

                    Такая конструкция либо помещается в HAVING, либо используется в коррелированном WHERE [NOT] EXISTS.
                    Есть претензии ко мне как к модератору? читайте Правила, разделы 5 и 6, и действуйте соответственно.
                    Есть претензии ко мне как к участнику? да ради бога.
                    Не нравятся мои ответы? не читайте их.
                    В общем, берегите себя. Нервные клетки не восстанавливаются.
                      Спасибо. Некоторые конструкции мне тяжело переваривать :)
                      "Воля - это то, что заставляет тебя побеждать, когда твой рассудок говорит тебе, что ты повержен" Карлос Кастанеда
                        ЕслИ "ничего не брать " означает ноль, то NULL надо заменить на 0.
                        ExpandedWrap disabled
                          SELECT a.Summa * b.Cnt
                          FROM
                          (
                          Select 'Summa'
                          From table1
                          Where 'Дата'>=@дата1 and 'Дата'<=@дата2
                          ) as a
                          CROSS APPLY
                          (SELECT CASE WHEN
                           COUNT(*) >0 THEN 1 ELSE NULL END) AS Cnt
                          FROM Tabe1
                          Where 'Дата'=@дата2
                          )as b
                        Сообщение отредактировано: MIF -
                        Мои религиозные убеждения не позволяют мне комментировать код.
                        Моё мировоззренье таково: в программе комментария ни одного!
                          ExpandedWrap disabled
                            Select 'Сумма' * CASE WHEN Max('Дата')=@дата2 THEN 1 ELSE 0 END
                            From table1
                            Where 'Дата'>=@дата1 and 'Дата'<=@дата2
                          Мои религиозные убеждения не позволяют мне комментировать код.
                          Моё мировоззренье таково: в программе комментария ни одного!
                          1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                          0 пользователей:


                          Рейтинг@Mail.ru
                          [ Script Execution time: 0,1461 ]   [ 17 queries used ]   [ Generated: 13.12.18, 01:33 GMT ]