Проблема объединить 2 запроса, чтобы получить единый набор результатов - PullRequest
0 голосов
/ 12 декабря 2018

Я написал два запроса для SQL Server, один для предоставления «Итого выручки» и один для «Итога перевозчика».Я подтвердил, что оба работают правильно.Теперь я пытаюсь включить все эти данные в набор результатов с помощью следующего запроса.

select 
    a.ctripnumber, 'Revenue Total', 'Carrier Total' 
from 
    (
        (select r.ctripnumber, sum(Revenue_Subtotal) as 'Revenue Total' 
         from 
             (select 
                  r.ctripnumber, r.cmethod, sum(r.curevenue) as Revenue_Subtotal
              from  
                  revenuedtl r 
              where 
                  r.cmethod in (select distinct r.cmethod from revenuedtl r)
                  --and r.ctripnumber = '324198'
              group by 
                  r.ctripnumber, r.cmethod) r
         group by 
             r.ctripnumber),
        (select p.ctripnumber, sum(Carrier_Subtotal) as 'Carrier Total' 
         from 
             (select 
                  p.ctripnumber, p.cmethod, sum(p.curevenue) as Carrier_Subtotal 
              from 
                  payrolldtl p 
              where 
                  p.cmethod in (select distinct p.cmethod from payrolldtl p) 
                  --and p.ctripnumber = '324198'
              group by 
                  p.ctripnumber, p.cmethod) p
         group by p.ctripnumber)) a
where 
    p.ctripnumber = r.ctripnumber
group by 
    a.ctripnumber

Однако я получаю следующие ошибки:

Msg102, уровень 15, состояние 1, строка 11
неправильный синтаксис рядом с ','.

Msg 102, уровень 15, состояние 1, строка 20
неправильный синтаксис рядом с ')'.

Кажется, что ',' должно быть правильным, так как я пытаюсь получить результаты из трех столбцов.Я проверил ')' и не вижу осиротевших.

Я попробовал следующее, используя внутреннее соединение, но я получаю несколько разных ошибок

select 
    r.ctripnumber, 'Revenue Total', 'Carrier Total'
    (select r.ctripnumber, sum(Revenue_Subtotal) as 'Revenue Total' 
     from 
         (select r.ctripnumber,r.cmethod,sum(r.curevenue) as Revenue_Subtotal
          from revenuedtl r 
          where r.cmethod in (select distinct r.cmethod from revenuedtl r)
          group by r.ctripnumber, r.cmethod) r
     group by r.ctripnumber)
inner join
    (select p.ctripnumber,sum(Carrier_Subtotal) as 'Carrier Total' 
     from 
         (select p.ctripnumber,p.cmethod,sum(p.curevenue) as Carrier_Subtotal 
          from payrolldtl p 
          where p.cmethod in (select distinct p.cmethod from payrolldtl p) 
          group by p.ctripnumber, p.cmethod) p
     group by p.ctripnumber) on r.ctripnumber = p.ctripnumber

Ошибки, которые яполучить это время:

Сообщение 156, Уровень 15, Состояние 1, Строка 9
Неверный синтаксис рядом с ключевым словом "внутренний"

Сообщение 156, Уровень 15, Состояние1,Строка 17
Неверный синтаксис рядом с ключевым словом 'on'

Разъяснение

Есть два запроса, которые работают хорошо, один, который получает номера командировок и доход, а другой -номера поездок и стоимость доставки.

Запрос 1

select r.ctripnumber, sum(Revenue_Subtotal) as 'Revenue Total' 
         from 
             (select r.ctripnumber, r.cmethod, sum(r.curevenue) as Revenue_Subtotal
              from revenuedtl r 
              where r.cmethod in 
                  (select distinct r.cmethod from revenuedtl r)
              group by r.ctripnumber,r.cmethod) r
         group by r.ctripnumber

Частичные результаты:

ctripnumber Revenue Total
160837  682.00
232813  1151.75
163973  335.00
249132  3024.00

Запрос 2

select p.ctripnumber, sum(Carrier_Subtotal) as 'Carrier Total' 
         from 
             (select p.ctripnumber, p.cmethod, sum(p.curevenue) as Carrier_Subtotal 
              from payrolldtl p 
              where p.cmethod in 
                  (select distinct p.cmethod from payrolldtl p) 
         group by p.ctripnumber, p.cmethod) p
    group by p.ctripnumber

Частичные результаты:

ctripnumber Carrier Total
206266  48.00
111099  225.00
107283  206.25
6558    250.00

Теперь, когда у меня есть эти запросы, я хочу объединить результаты, поэтому я написал следующее:

select 
    a.ctripnumber, 'Revenue Total', 'Carrier Total' 
from 
    (
        (select r.ctripnumber, sum(Revenue_Subtotal) as 'Revenue Total' 
         from 
             (select r.ctripnumber, r.cmethod, sum(r.curevenue) as Revenue_Subtotal
              from revenuedtl r 
              where r.cmethod in 
                  (select distinct r.cmethod from revenuedtl r)
              group by r.ctripnumber,r.cmethod) r
         group by r.ctripnumber),
        (select p.ctripnumber, sum(Carrier_Subtotal) as 'Carrier Total' 
         from 
             (select p.ctripnumber, p.cmethod, sum(p.curevenue) as Carrier_Subtotal 
              from payrolldtl p 
              where p.cmethod in 
                  (select distinct p.cmethod from payrolldtl p) 
         group by p.ctripnumber, p.cmethod) p
    group by p.ctripnumber)
) a
where p.ctripnumber = r.ctripnumber
group by a.ctripnumber

Я получаю следующие ошибки:

Сообщение 102, Уровень 15, Состояние 1, Строка 12 Неправильный синналог рядом с ','.

Сообщение 102, уровень 15, состояние 1, строка 21 Неверный синтаксис рядом с ')'.

1 Ответ

0 голосов
/ 13 декабря 2018

Я бы не рекомендовал использовать пробелы внутри имен столбцов, но работает ли это для вас?

select 
    tRev.ctripnumber, "Revenue Total", "Carrier Total"
FROM
(select r.ctripnumber, sum(Revenue_Subtotal) as "Revenue Total" 
 from 
     (select r.ctripnumber,r.cmethod,sum(r.curevenue) as Revenue_Subtotal
      from revenuedtl r 
      where r.cmethod in (select distinct r.cmethod from revenuedtl r)
      group by r.ctripnumber, r.cmethod) r
 group by r.ctripnumber) tRev
inner join
(select p.ctripnumber,sum(Carrier_Subtotal) as "Carrier Total" 
 from 
     (select p.ctripnumber,p.cmethod,sum(p.curevenue) as Carrier_Subtotal 
      from payrolldtl p 
      where p.cmethod in (select distinct p.cmethod from payrolldtl p) 
      group by p.ctripnumber, p.cmethod) p
 group by p.ctripnumber) tCar on tRev.ctripnumber = tCar.ctripnumber
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...