Как исправить этот SQL с помощью оператора UNION ALL?

0

У меня есть список ежедневных данных, которые я хочу суммировать на основе имени, но группировать и отображать по дате. Я хочу объединить из таблицы заказов и 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);

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

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'.
  • 0
    Решено спасибо ^ _ ^
Теги:

1 ответ

1

Вместо 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);
  • 2
    Не превращайте это в игру «найди разницу». Объясните, что вы изменили (конкретно) и почему .
  • 0
    не удалось .. я получил эти ошибки "Сообщение 164, уровень 15, состояние 1, строка 1 Каждое выражение GROUP BY должно содержать хотя бы один столбец, который не является внешней ссылкой. Сообщение 207, уровень 16, состояние 1, строка 23 Неверное имя столбца «DatePayment». "
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню