Как исправить этот SQL с помощью оператора UNION ALL? - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть список ежедневных данных, которые я хочу суммировать на основе имени, но группировать и отображать по дате.Я хочу объединить из таблицы заказов и POS.Мне удается получить каждое отдельное бронирование и POS, но при попытке объединить .. Не удалось

Все операторы select хороши, но не удалось, когда я добавляю в оператор UNION ALL

Select Name, CONVERT(char(10), DatePayment,120), SUM(Amount) Amount 
From (
select PT.Name, CONVERT(char(10), DatePayment, 120) Date, SUM(Amount) Amount    
    From Payments P 
        Inner Join PaymentTypes PT On P.PaymentType = PT.ID 
        Inner Join BookingPayments BP On P.ID = BP.PaymentID 
        Inner Join Bookings B On B.ID = BP.BookingID 
        Where   DatePayment >= '2018-12-01 00:00:00' And 
                DatePayment <= '2018-12-31 23:59:59.997' And 
                BookingStatus IN (0,2,3,4,6) 
        Group By PT.Name, CONVERT(char(10), DatePayment, 120)

UNION ALL
Select  PT.Name, CONVERT(char(10), DatePayment, 120) Date, SUM(P.Amount) Amount 
From Payments P 
        Inner Join PaymentTypes PT On P.PaymentType = PT.ID 
        Inner Join POSSales POS On P.ID = POS.PaymentID 
        Where   DatePayment >= '2018-12-01 00:00:00' And 
                DatePayment <= '2018-12-31 23:59:59.997' 
        Group By PT.Name, CONVERT(char(10), DatePayment, 120))

a Group By Name, CONVERT(char(10), DatePayment, 120)
order by CONVERT(char(10), DatePayment, 120);

Iпродолжаю получать следующую ошибку

Msg 207, Level 16, State 1, Line 22
Invalid column name 'DatePayment'.
Msg 207, Level 16, State 1, Line 1
Invalid column name 'DatePayment'.
Msg 207, Level 16, State 1, Line 23
Invalid column name 'DatePayment'.

1 Ответ

0 голосов
/ 01 февраля 2019

Вместо DatePayment вам нужно использовать Date as, вы использовали псевдоним, вам нужно выбрать псевдоним

   Select Name, CONVERT(char(10), `Date`,120), SUM(Amount) Amount 
        From (
        select PT.Name, CONVERT(char(10), DatePayment, 120) Date, SUM(Amount) Amount    
            From Payments P 
                Inner Join PaymentTypes PT On P.PaymentType = PT.ID 
                Inner Join BookingPayments BP On P.ID = BP.PaymentID 
                Inner Join Bookings B On B.ID = BP.BookingID 
                Where   DatePayment >= '2018-12-01 00:00:00' And 
                        DatePayment <= '2018-12-31 23:59:59.997' And 
                        BookingStatus IN (0,2,3,4,6) 
                Group By PT.Name, CONVERT(char(10), DatePayment, 120)

        UNION ALL
        Select  PT.Name, CONVERT(char(10), DatePayment, 120) Date, SUM(P.Amount) Amount 
        From Payments P 
                Inner Join PaymentTypes PT On P.PaymentType = PT.ID 
                Inner Join POSSales POS On P.ID = POS.PaymentID 
                Where   DatePayment >= '2018-12-01 00:00:00' And 
                        DatePayment <= '2018-12-31 23:59:59.997' 
                Group By PT.Name, CONVERT(char(10), DatePayment, 120)
)a Group By Name, CONVERT(char(10), `Date`, 120)
   order by CONVERT(char(10), `Date`, 120);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...