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

Модераторы: Akina
Страницы: (15) « Первая ... 4 5 [6] 7 8 ...  14 15 все  ( Перейти к последнему сообщению )  
> Помогите с запросом
    Akina
    Не подскажешь, как-то можно взять итог и подитог только по 2 столбцам?
    Есть такой запрос:
    ExpandedWrap disabled
      use PJM10
      declare @d1 date
      declare @d2 date
      set @d1=DATEADD(day,1,EOMONTH(GETDATE(),-2))
      set @d2=DATEADD(day,1,EOMONTH(GETDATE(),-1))
       
       
      SELECT   isnull(QUOTENAME(Category.FileAs,'"'),'"Отсутствует"') AS Источник, QUOTENAME(Company.FileAs,'"') AS Компания, Format( sum(PaymentDetail.Value) , N'#.00', N'ru-ru') AS Сумма, isnull(QUOTENAME(Project.Comments,'"'),'""') AS Комментарий
      FROM         PaymentDetail INNER JOIN
                            Payment ON PaymentDetail.PaymentID = Payment.ID INNER JOIN
                            Invoice ON PaymentDetail.InvoiceID = Invoice.ID INNER JOIN
                            Project ON Invoice.ProjectID = Project.ID
                            INNER JOIN Company ON Payment.PayerCompanyID = Company.ID
                            
                             LEFT OUTER JOIN
                            DocumentCategory ON Project.ID = DocumentCategory.DocumentID LEFT OUTER JOIN
                            Category ON DocumentCategory.CategoryID = Category.ID
      WHERE     (Payment.FileAs NOT LIKE N'%-1%') AND (Payment.FileAs NOT LIKE N'%-3%') AND     Payment.Date >=@d1 and  Payment.Date< @d2
      GROUP BY
      rollup(Category.FileAs,Company.FileAs,Project.Comments )


    я хочу чтобы rollup был только по Category.FileAs и Company.FileAs
      Цитата ^D^ima @
      я хочу чтобы rollup был только по Category.FileAs и Company.FileAs

      Используй GROUPING SETS.
        Получилось так:
        Я поставил с скобки
        ExpandedWrap disabled
          GROUP BY
          rollup (Category.FileAs,(Company.FileAs,Project.Comments))

        :)
          У некоторых компаний несколько отраслей(список с множественным выбором), мне нужно найти компании у который несколько отраслей. Как это сделать?
          Я подумал что можно как-то получить количество записей. возвращенных соединением, только как?

          Как можно узнать сколько вернуло соединение записей?
          Цитата ^D^ima @
          LEFT OUTER JOIN
            Цитата ^D^ima @
            У некоторых компаний несколько отраслей(список с множественным выбором)

            Это - отображение данных. На кое чхать с высокой колокольни. Важно, как это хранится в таблицах.

            Цитата ^D^ima @
            Как можно узнать сколько вернуло соединение записей?

            Группировка и COUNT(), как обычно.
              Цитата Akina @
              Группировка и COUNT(), как обычно.

              спасибо
                Цитата Akina @
                Группировка и COUNT(), как обычно.

                COUNT(*) или COUNT(поле)?
                  Нет смысла указывать поле - нам не надо отсеивать NULL-значения.
                    Если в таблице колонка имеет тип int, а мне нужно ее поделить и получить значение с запятой, как это организовать?
                    ExpandedWrap disabled
                      use PJM10
                      declare @d1 date
                      declare @d2 date
                      set @d1='01.01.2017'
                      set @d2=GETDATE()+1
                      declare @sum float
                       
                      SELECT  Project.FileAs as Проект, sum(@sum=TimeEntry.Duration/60) AS Сумма
                      FROM         project
                                   inner JOIN  TimeEntry ON   Project.ID = TimeEntry.ProjectID            
                      WHERE  Project.Date >=@d1 and  Project.Date< @d2
                      Group by  Project.FileAs

                    TimeEntry.Duration тип int.
                    ругается на sum(@sum=TimeEntry.Duration/60)
                      Друзья, так и не нашел ответа на вопрос.
                        Ну типа
                        ExpandedWrap disabled
                          SELECT  Project.FileAs AS Проект, SUM(TimeEntry.Duration)/60.0 AS Сумма
                                            /* ну или там   CAST(SUM(TimeEntry.Duration) AS FLOAT)/60 AS Сумма */
                          FROM project
                          INNER JOIN  TimeEntry ON Project.ID = TimeEntry.ProjectID            
                          WHERE Project.Date >=@d1 and  Project.Date< @d2
                          GROUP BY Project.FileAs


                        Цитата ^D^ima @
                        ругается на

                        А процититровать ругательства?
                          Цитата Akina @
                          SUM(TimeEntry.Duration)/60.0 AS Сумма

                          Так возвращает только целые

                          Цитата Akina @
                          CAST(SUM(TimeEntry.Duration) AS FLOAT)/60 AS Сумма

                          Бинго!!!

                          Только остался вопрос, как округлять?

                          Цитата Akina @
                          А процититровать ругательства?

                          sum(@sum=TimeEntry.Duration/60)
                          Неправильный синтаксис около конструкции ")".

                          ) помечена красным пунктиром
                            Цитата ^D^ima @
                            как округлять?

                            ROUND(), вероятно...
                              :thanks:
                              Как можно упростить конструкцию?
                              Есть 1 селект из 3 запросов, у которых Query1.Проект=Query2.Проект=Query3.Проект, но такая конструкция недопустима. Пока сделал так:
                              ExpandedWrap disabled
                                where Query1.Проект=Query2.Проект and Query2.Проект=Query3.Проект


                              Как-то можно более грамотно написать?
                                Цитата ^D^ima @
                                Query1.Проект=Query2.Проект=Query3.Проект, но такая конструкция недопустима.

                                Это почему же? вполне допустима. Просто надо понимать, ЧТО ИМЕННО будет вычислено.

                                Цитата ^D^ima @
                                Как-то можно более грамотно написать?

                                Вот как раз ЭТО - грамотно. При условии, что нет возможности сами запросы объединить...
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (15) « Первая ... 4 5 [6] 7 8 ...  14 15 все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0558 ]   [ 16 queries used ]   [ Generated: 16.04.24, 22:12 GMT ]