#c# #sql #ms-access
#c# #sql #ms-access
Вопрос:
Благодаря Густаву я намного ближе к решению своей проблемы.
Я использую его код, но он не способен правильно суммировать.
Я отладил свой код, и когда я хочу суммировать за 1 год, я получаю этот sql-запрос: "SELECT Datum, Sum(Kosten) FROM tblKursspielbuchung, tblKasse WHERE tblKursspielbuchung.Datum >= #2019/01/01# AND tblKursspielbuchung.Datum < #2020/01/01# GROUP BY Datum"
Например, я получаю 1460 вместо 730, что было бы правильным ответом. Я могу думать только о том, что проблемой может быть наличие нескольких строк для рейсов со стоимостью. У меня возникают проблемы с избавлением от них, когда я их суммирую. Я был бы признателен, если бы кто-нибудь мог сказать мне, как использовать distinct или что-то подобное в этой ситуации. Если ничего не работает, я должен изменить код, чтобы у меня не было одинаковой стоимости в нескольких строках.
Ответ №1:
Вы могли бы построить свой SQL следующим образом:
int year = int.Parse(txtJahr.Text);
"SELECT Datum, Sum(Kosten) FROM tblKursspielbuchung, tblKasse WHERE tblKursspielbuchung.Datum >= #" new DateTime(year, 1, 1).ToString("yyyy'/'MM'/'dd") "# AND tblKursspielbuchung.Datum < #" new DateTime(year 1, 1, 1).ToString("yyyy'/'MM'/'dd") "# GROUP BY Datum";
Комментарии:
1. Это работает. Мне просто нужно было добавить # » перед вторым новым DateTime
2. Поскольку у меня есть несколько записей, я должен группировать по Datum и FlightID.
3. Не будете ли вы так любезны переписать свой код для работы с month?
"SELECT Datum, Sum(Kosten) FROM tblKasse, tblKursspielbuchung WHERE tblKursspielbuchung.Datum >= #" new DateTime(year, month, 1).ToString("yyyy'/'MM'/'dd") "# AND tblKursspielbuchung.Datum < #" new DateTime(year, month 1, 1).ToString("yyyy'/'MM'/'dd") "# GROUP BY Datum";
К сожалению, у меня это не работает. Используя этот код в Access, я получаю за каждую запись в месяце в качестве стоимости стоимость года.4.
"SELECT Datum, Sum(Kosten) FROM tblKursspielbuchung, tblKasse GROUP BY Datum";
Поскольку month не работает, я проверил, работает ли year, когда я удаляю предложение WHERE. Похоже, что предложение where никогда не используется. Sum (Kosten) мгновенно вычисляет сумму и после этого не изменяется. Может быть, мне нужно к этому где-нибудь присоединиться. Обе таблицы связаны с FlightID.5. Передача значения месяца также будет работать, так что вы будете делать что-то еще.
Ответ №2:
Часто проблема со сравнением дат заключается в том, что способ построения compare настраивает его на сравнение как строку, а не как дату. Я бы сделал преобразование даты перед вставкой значения в выбранную вами строку. Если сравнение происходит в MS ACCESS, вам нужно будет обернуть дату символом #, то есть #date#
Ответ №3:
В MS Access константы даты имеют специальный синтаксис. Я также настоятельно рекомендую JOIN
. Я подозреваю, что вы хотите что-то вроде этого:
SELECT ks.Datum, Sum(Kosten)
FROM tblKursspielbuchung as ks INNER JOIN
tblKasse as k
ON ks.Datum = k.Datum
WHERE ks.Datum >= #01/01/2019# AND 'ks.Datum < #01/01/2010#
GROUP BY ks.Datum;
Комментарии:
1. Это вроде как работает. Мне пришлось изменить вашу строку 4 на ON ks. FlightID = k.FlightID потому что это мой внешний ключ, по которому я могу к ним присоединиться. Как ни странно, это дает мне только 880 в качестве ответа, а не 1320. У меня есть 6 строк с 220, и только 4 суммируются. Не могли бы вы проверить, правильно ли используется в вашей строке 6′? Возможно, именно по этой причине некоторые числа не суммируются.