Я создаю отчет в ColdFusion, похожий на регистр проверок. На данный момент я суммировал суммы по номерам чеков; однако, если к тому же номеру чека применен кредит, он отображается как другая запись. Чтобы соответствовать способу запроса отчета, мне нужно иметь возможность показывать только одну запись для каждого номера чека с соответствующей суммой.
Данные о сумме хранятся в столбце суммы таблицы в виде числа с плавающей запятой. В таблице кредит фактически указан как -25. Значения столбцов chckDate, payee и rtCode идентичны для строки с кредитом.
Чек № XXXX $3063,00
Чек № XXXX (25 долларов США)
Должен отображаться только чек № XXXX на сумму 3038 долларов США.
<cfquery name = "checkListSum" datasource = "xxx">
select distinct checkno, sum(amount) as checkReportSum, chckDate, payee, rtCode
from table
where year(chckDate) = #checkYear#
and month(chckDate) = #checkMonth#
group by checkNo, chckDate, payee, rtCode
order by chckDate
Это запрос, который я использую для извлечения информации из таблицы, однако я не знаю, как вычесть оценку.
Любая помощь будет принята с благодарностью.
Если checkNo не совпадает для строки с кредитом, это ваша проблема
Ваш пример данных должен включать значения chckDate
для каждой строки.
Вы группируете по chckDate, но не показываете это. Вероятно, проблема в том, что chckDate отличается. Или что получатели платежа содержат небольшие различия, такие как пробелы.
Кроме того, вам не нужно select distinct
, поскольку вы уже группируетесь.
вам не нужно различать, если у вас есть группировка + проблема, скорее всего, связана с полем даты, дата проверки может отличаться для этих двух записей, поэтому группировка по не работает правильно и разбивает ее на две строки
Если неясно, что говорят другие о chckDate
, и вам все еще нужны рекомендации, обновите вопрос, указав пример данных, включающий этот столбец, а также желаемые результаты из этого SQL-запроса, и мы можем помочь вам создать SQL-код, чтобы добиться этого.
@Schwern В вопросе говорится, что значения столбцов chckDate, payee и rtCode идентичны.
@Barmar, если все идентично, это должно работать, как упоминали другие люди в сообществе, это похоже на проблему с датой, поскольку это единственное поле, не отображаемое в образце данных, но, думаю, будет известно больше, как только данные будут показаны.
@Бармар, я думаю, они в это верят.
минимально воспроизводимый пример должен включать в себя как данные таблицы образцов, так и ожидаемый результат. Также добавьте тег для используемой базы данных. (В вашем запросе используются функции, специфичные для продукта.)
Попробуйте запустить этот запрос
select checkno, sum(amount) as checkReportSum, min(chckDate)chckDate
,min(payee)payee, min(rtCode) rtCode
from tableХ
where year(chckDate) = #checkYear#
and month(chckDate) = #checkMonth#
group by checkNo
order by min(chckDate)
Какой результат вы получите?
ВалНик :) как всегда занимаюсь sql! вы забыли присвоение псевдонима min(chckDate) и забыли указать псевдоним min(chckDate) в предложении SELECT.
Я этого не поняла You forgot to give an alias
. Какой псевдоним в min(chckDate)chckDate
забыл?
сейчас выглядит нормально...
ВЫБЕРИТЕ ... [ [ AS ] псевдоним_столбца ]. AS
не является обязательным. (Learn.microsoft.com/en-us/sql/t-sql/queries/…)
а что насчет читабельности? что, если я новичок в SQL
и вижу ваш код впервые... :(> "Псевдонимы также используются для указания имен результатов выражений",
Псевдонимы, несомненно, полезны для удобства чтения. Однако синтаксис expr1 as alias1
и expr1 alias1
разрешен правилами. И никакого lack of alias
здесь нет. Псевдоним присутствует в обеих версиях. Можно сказать, что одна форма лучше другой – здесь я не буду спорить, это действительно так.
-25 — это сумма в строке? если да, то он должен быть правильно добавлен функцией SUM() в ваш запрос.