Hank Williams Ответов: 1

Проблема с SQL запросом к базе данных access


Да, я знаю о параметризованных запросах, однако для простоты этот вопрос публикуется без использования.


Примеры Данных Ниже Взяты Из Базы Данных Access
Идентификатор Ticket_Year Ticket_Number Ticket_Amount Amount_Paid Transaction_Date_Time
8 2013 06879 256.65 200 2/10/2018 11:02:00 АМ
9 2013 06879 256.65 56 2/10/2018 11:03:00 АМ
10 2013 06880 29.3 27 2/10/2018 11:55:47 АМ
11 2013 06880 29.3 2 2/10/2018 11:55:56 АМ
12 2013 06881 58.5 57 2/10/2018 11:57:44 АМ
13 2013 06881 58.5 1 2/10/2018 11:57:53 АМ
14 2013 06882 36 35 2/10/2018 12:05:05 ПМ
15 2013 06882 36 1 2/10/2018 12:05:15 ПМ
16 2013 06883 85.05 80 2/10/2018 12:19:12 ПМ
17 2013 06883 85.05 5 2/10/2018 12:19:28 ПМ
18 2013 06884 514.5 200 2/10/2018 1:47:01 ПМ
19 2013 06884 514.5 200 2/10/2018 2:05:46 ПМ
20 2013 06884 514.5 110 2/10/2018 2:09:58 ПМ
21 2013 06886 57.28 57 2/10/2018 7:16:39 ПМ
Пример данных приведен выше

Я хочу, чтобы выбрать столбцы [Ticket_Number], [Ticket_Amount], сумма([Amount_Paid]), [Transaction_Date_Time], [Ticket_Year], а затем сгруппировать данные по [Ticket_Number], а затем упорядочить данные по столбцам [Transaction_Date_Time] АСК

Для приведенного выше примера я хотел бы, чтобы запрос возвращался
06879 256.65 256 2/10/2018 11:02:00 am 2013
06880 29.3 29 2/10/2018 11:55:47 AM 2013
06881 58.5 58 2/10/2018 11:57:44 AM 2013
06882 36 36 2/10/2018 12:05:05 PM 2013
06883 85.05 85 2/10/2018 12:19:12 PM 2013
06884 514.5 519 2/10/2018 2:09:58 PM 2013
06886 57.28 57 2/10/2018 7:16:39 PM 2013

Что я уже пробовал:

Выберите [Ticket_Number], [Ticket_Amount], сумма([Amount_Paid]), [Transaction_Date_Time], [Ticket_Year] от платных, где [Transaction_Date_Time] как '%2018% заказов по [Transaction_Date_Time] АСК группы [Ticket_Amount]

Выше Приведена Ошибка О Агрегатных Функциях

Выберите [Ticket_Number], [Ticket_Amount], SUM([Amount_Paid]), [Transaction_Date_Time], [Ticket_Year] FROM Paid WHERE [Transaction_Date_Time] LIKE '%2018%' ORDER BY [Transaction_Date_Time] ASC GROUP BY [Ticket_Number], [Ticket_Amount], [Transaction_Date_Time], [Ticket_Year]

Который Завершается Без Ошибок Однако Возвращаемые Данные Идентичны Данным Orriginal

1 Ответов

Рейтинг:
2

David_Wimbley

Если столбец находится в вашем запросе, он должен быть в операторе group by. Пример: ваш первый запрос имеет только "Ticket_Amount" в вашей группе, где ваш второй запрос имеет все ваши столбцы в операторе group by, потому что все они находятся в вашем операторе Select, что имеет смысл, почему данные выглядят "нормально" для вас.

Возможно, вам лучше сделать это в виде подзапроса или переосмыслить, какие данные вам нужны, вместо того чтобы запрашивать все столбцы. Возможно, вам придется переосмыслить свою схему, поскольку, с моим ограниченным пониманием, кажется, что у вас есть несколько записей на билет в вашей платной таблице...я бы подумал, что у вас будет другая таблица под названием, скажем..."билет" с внешним ключом к вашей платной таблице, и тогда вы сможете легче выполнить этот запрос.

В противном случае с моей точки зрения вам, вероятно, придется просто сделать подзапрос, который будет выглядеть примерно так.

SELECT *, (SELECT SUM([Amount_Paid]) FROM Paid AS B WHERE A.Transaction_DateTime LIKE '%2018%' GROUP BY Ticket_Number) FROM Paid AS A ORDER BY Transaction_Date_Time


Учитывая, что я не знаю вашей схемы, это другая альтернативная форма подзапроса, которая, как мне кажется, может работать лучше...возможно

SELECT *, (SELECT SUM([Amount_Paid]) FROM Paid AS B WHERE A.Ticket_Bumber = B.Ticket_Number GROUP BY Ticket_Number) FROM Paid AS A ORDER BY Transaction_Date_Time


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