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

Модераторы: Pr0[)!9Y, Akina, JoeUser
Страницы: (3) 1 2 [3]  все  ( Перейти к последнему сообщению )  
> Помогите с запросом
Тогда почему надо суммировать PaymentDetail.Value?
Есть претензии ко мне как к модератору? читайте Правила, разделы 5 и 6, и действуйте соответственно.
Есть претензии ко мне как к участнику? да ради бога.
Не нравятся мои ответы? не читайте их.
В общем, берегите себя. Нервные клетки не восстанавливаются.
можно не суммировать
"Воля - это то, что заставляет тебя побеждать, когда твой рассудок говорит тебе, что ты повержен" Карлос Кастанеда
:'(:'(:'(:'(:'(:'(:'(:'(:'(
"Воля - это то, что заставляет тебя побеждать, когда твой рассудок говорит тебе, что ты повержен" Карлос Кастанеда
^D^ima
Не, давай так. Переноси структуры и пример наполнения в Access, и выкладывай полученную базу, с указанием, какой должен получиться результат на этом наполнении. Будем смотреть.
Есть претензии ко мне как к модератору? читайте Правила, разделы 5 и 6, и действуйте соответственно.
Есть претензии ко мне как к участнику? да ради бога.
Не нравятся мои ответы? не читайте их.
В общем, берегите себя. Нервные клетки не восстанавливаются.
Akina
Прошу прощения, был недостаточно нагляден.

С Access тяжело, сделал все наглядно:
Запрос:
ExpandedWrap disabled
    use PJM10
    SELECT   (PaymentDetail.Value) AS СуммаПриход,Company.FileAs AS Компания,   Project.FileAs as Проект, sum(Expense.TotalPC) AS СуммаРасхода
     
    FROM         PaymentDetail
                            INNER JOIN Payment ON PaymentDetail.PaymentID = Payment.ID
                            INNER JOIN   Company ON Payment.PayerCompanyID = Company.ID
                            INNER JOIN Invoice ON PaymentDetail.InvoiceID = Invoice.ID
                          
                          INNER JOIN Project ON Invoice.ProjectID = Project.ID
                        inner JOIN Expense ON Project.ID = Expense.ProjectID
     
    where Company.FileAs ='Идиллия'
    GROUP BY PaymentDetail.Value, Company.FileAs,    Project.FileAs

Результат:
user posted image

Что хочу:
Получить только 1 строку в которой:
user posted image
"Воля - это то, что заставляет тебя побеждать, когда твой рассудок говорит тебе, что ты повержен" Карлос Кастанеда
Гм... А что получится на тех же данных, если обернуть PaymentDetail.Value в SUM() и убрать из выражения группировки?

В самом крайнем случае
ExpandedWrap disabled
    SELECT SUM(СуммаПриход) AS СуммаПриход, Компания, Проект, СуммаРасхода
    FROM (твой запрос) AS dummy
    GROUP BY Компания, Проект


Цитата ^D^ima @
С Access тяжело

Что там тяжёлого? Открыть Access, создать новую БД, импортировать туда таблицы и почистить от лишних данных (если данных слишком дофига, то импортировать структуры, а потом запросами скопировать немного данных), сжать, зипануть - и всё.
Сообщение отредактировано: Akina -
Есть претензии ко мне как к модератору? читайте Правила, разделы 5 и 6, и действуйте соответственно.
Есть претензии ко мне как к участнику? да ради бога.
Не нравятся мои ответы? не читайте их.
В общем, берегите себя. Нервные клетки не восстанавливаются.
Цитата Akina @
Гм... А что получится на тех же данных, если обернуть PaymentDetail.Value в SUM() и убрать из выражения группировки?

Вопрос верный, я так уже делал, он СуммаРасхода суммирует а СуммаПриход вообще треш непонятный:

user posted image

По поводу аксеса, там вообще не принципиально, достаточно 2 таблицы связанные сделать, накидаю сейчас

Добавлено
Akina
ДАААААААААААА, через запрос в запросе все срослась!!!!!!:dance::dance::dance:

Добавлено
Наверное последний вопрос:
ExpandedWrap disabled
    SELECT SUM(СуммаПриход) AS СуммаПриход, Компания, СуммаРасхода
     
    from
     
    (SELECT   (PaymentDetail.Value) AS СуммаПриход,Company.FileAs AS Компания,    sum(Expense.TotalPC) AS СуммаРасхода
     
    FROM         PaymentDetail
                            INNER JOIN Payment ON PaymentDetail.PaymentID = Payment.ID
                            INNER JOIN   Company ON Payment.PayerCompanyID = Company.ID
                            INNER JOIN Invoice ON PaymentDetail.InvoiceID = Invoice.ID
                          
                          INNER JOIN Project ON Invoice.ProjectID = Project.ID
                        inner JOIN Expense ON Project.ID = Expense.ProjectID
     
    GROUP BY PaymentDetail.Value, Company.FileAs
    ) as dummy
    where компания ='Идиллия' or компания ='Авангард ОАО'
    GROUP BY  Компания, СуммаРасхода

дает
user posted image

Как-то можно свернуть ещё по компаниям другим мпособом, кроме как ещё делать запрос в запросе, в котором запрос?
ExpandedWrap disabled
    use PJM10
     
    Select sum(СуммаПриход)as СуммаПриход, Компания, sum(СуммаРасхода) as СуммаРасхода
    from(
     
    SELECT SUM(СуммаПриход) AS СуммаПриход, Компания, СуммаРасхода
     
    from
     
    (SELECT   (PaymentDetail.Value) AS СуммаПриход,Company.FileAs AS Компания,    sum(Expense.TotalPC) AS СуммаРасхода
     
    FROM         PaymentDetail
                            INNER JOIN Payment ON PaymentDetail.PaymentID = Payment.ID
                            INNER JOIN   Company ON Payment.PayerCompanyID = Company.ID
                            INNER JOIN Invoice ON PaymentDetail.InvoiceID = Invoice.ID
                          
                          INNER JOIN Project ON Invoice.ProjectID = Project.ID
                        inner JOIN Expense ON Project.ID = Expense.ProjectID
     
    GROUP BY PaymentDetail.Value, Company.FileAs
    ) as dummy
    where компания ='Идиллия' or компания ='Авангард ОАО'
    GROUP BY  Компания, СуммаРасхода) as dummy2
     
    GROUP BY  Компания
    order by Компания


Добавлено
user posted image
"Воля - это то, что заставляет тебя побеждать, когда твой рассудок говорит тебе, что ты повержен" Карлос Кастанеда
"Средний" подзапрос - лишний.
ExpandedWrap disabled
    Select sum(СуммаПриход)as СуммаПриход, Компания, sum(СуммаРасхода) as СуммаРасхода
    from (
             SELECT PaymentDetail.Value AS СуммаПриход, Company.FileAs AS Компания, sum(Expense.TotalPC) AS СуммаРасхода
             FROM PaymentDetail
             INNER JOIN Payment ON PaymentDetail.PaymentID = Payment.ID
             INNER JOIN   Company ON Payment.PayerCompanyID = Company.ID
             INNER JOIN Invoice ON PaymentDetail.InvoiceID = Invoice.ID
             INNER JOIN Project ON Invoice.ProjectID = Project.ID
             inner JOIN Expense ON Project.ID = Expense.ProjectID
             GROUP BY PaymentDetail.Value, Company.FileAs
         ) as dummy
    GROUP BY  Компания
    order by Компания
Есть претензии ко мне как к модератору? читайте Правила, разделы 5 и 6, и действуйте соответственно.
Есть претензии ко мне как к участнику? да ради бога.
Не нравятся мои ответы? не читайте их.
В общем, берегите себя. Нервные клетки не восстанавливаются.
пришло в голову такое решение:
Если и платеж и расход связан с клиентом, то можно взять одним запросом все расходы, в другом все платежи и в условии where связать через названия клиента, получится как-то лаконичней

ExpandedWrap disabled
    use PJM10
    Select sum(PaymentDetail.Value) AS СуммаПриход, innerQuery.Компания, innerQuery.СуммаРасхода
     
    from PaymentDetail
                            INNER JOIN Payment ON PaymentDetail.PaymentID = Payment.ID
                            INNER JOIN   Company ON Payment.PayerCompanyID = Company.ID,
     
     
    (SELECT   Company.FileAs AS Компания,    sum(Expense.TotalPC) AS СуммаРасхода
     
    FROM         Expense            
              
                          INNER JOIN Project ON Expense.ProjectID = Project.ID
                          INNER JOIN   Company ON Project.CustomerCompanyID = Company.ID
                        
     
    GROUP BY Company.FileAs) as innerQuery
    where Company.FileAs=innerQuery.Компания and (Payment.FileAs LIKE N'%-1%')
    group by innerQuery.Компания, innerQuery.СуммаРасхода
    order by innerQuery.Компания
Сообщение отредактировано: ^D^ima -
"Воля - это то, что заставляет тебя побеждать, когда твой рассудок говорит тебе, что ты повержен" Карлос Кастанеда
Цитата ^D^ima @
пришло в голову такое решение

Подход правильный. Реализация - кривая.
Сделай два запроса, в каждом посчитай свою сумму. Оба их используй как подзапросы в секции FROM, связав по полю Компания. Само это поле возьми из любого из подзапросов, всё одно равны.
Есть претензии ко мне как к модератору? читайте Правила, разделы 5 и 6, и действуйте соответственно.
Есть претензии ко мне как к участнику? да ради бога.
Не нравятся мои ответы? не читайте их.
В общем, берегите себя. Нервные клетки не восстанавливаются.
Цитата Akina @
делай два запроса, в каждом посчитай свою сумму. Оба их используй как подзапросы в секции FROM, связав по полю Компания.

несколько не понял

ExpandedWrap disabled
    use PJM10
     
    Select  innerQuery1.Компания, innerQuery1.СуммаПриход, innerQuery2.СуммаРасхода
     
    From
    Company on Company.FileAs =innerQuery1.Компания=innerQuery2.Компания, -- Тут что-то не вяжется
     
    (Select  Company.FileAs as Компания, sum(PaymentDetail.Value) AS СуммаПриход
     
    from Company
            left JOIN Payment ON  Company.ID=Payment.PayerCompanyID
           left JOIN PaymentDetail ON Payment.ID  = PaymentDetail.PaymentID
    GROUP BY Company.FileAs) as innerQuery1,          
     
    (
    SELECT   Company.FileAs AS Компания,    sum(Expense.TotalPC) AS СуммаРасхода
    FROM         Company
     
      left JOIN Project ON Company.ID = Project.CustomerCompanyID
      left join Expense  on Project.ID  = Expense.ProjectID
    GROUP BY Company.FileAs) as innerQuery2
"Воля - это то, что заставляет тебя побеждать, когда твой рассудок говорит тебе, что ты повержен" Карлос Кастанеда
Цитата ^D^ima @
несколько не понял

Ну что ты всё заумь какую-то выдумываешь?

ExpandedWrap disabled
    SELECT innerQuery1.Компания
         , innerQuery1.СуммаПрихода
         , innerQuery2.СуммаРасхода
     
    FROM (   SELECT Company.FileAs as Компания
                  , SUM(PaymentDetail.Value) AS СуммаПрихода
             FROM Company
             JOIN Payment ON Company.ID=Payment.PayerCompanyID
             JOIN PaymentDetail ON Payment.ID = PaymentDetail.PaymentID
             GROUP BY Company.FileAs
         ) AS innerQuery1,
            
         (   SELECT Company.FileAs AS Компания
                  , SUM(Expense.TotalPC) AS СуммаРасхода
             FROM Company
             JOIN Project ON Company.ID = Project.CustomerCompanyID
             JOIN Expense ON Project.ID = Expense.ProjectID
             GROUP BY Company.FileAs
         ) as innerQuery2
     
    WHERE innerQuery1.Компания = innerQuery2.Компания
Есть претензии ко мне как к модератору? читайте Правила, разделы 5 и 6, и действуйте соответственно.
Есть претензии ко мне как к участнику? да ради бога.
Не нравятся мои ответы? не читайте их.
В общем, берегите себя. Нервные клетки не восстанавливаются.
Akina
теперь понятно, :thanks::thanks::thanks:
"Воля - это то, что заставляет тебя побеждать, когда твой рассудок говорит тебе, что ты повержен" Карлос Кастанеда
1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
0 пользователей:
Страницы: (3) 1 2 [3]  все


Рейтинг@Mail.ru
[ Script Execution time: 0,1502 ]   [ 20 queries used ]   [ Generated: 24.09.17, 08:31 GMT ]