#sql-server
#sql-сервер
Вопрос:
Имя моей таблицы — C_Payment_Service_Fee, а таблица содержит данные, которые приведены ниже
select top 10 * from c_payment_service_fee
amount crn_dt payment_mode
19.99 2015-08-11 23:06:58.877 CC
19.99 2015-05-11 13:30:59.603 CC
39.95 2016-06-29 10:26:09.380 CC
29.99 2015-09-13 22:22:57.703 CC
24.99 2016-04-15 14:59:22.130 CC
22.49 2014-08-29 15:09:39.230 CC
24.99 2013-01-15 15:51:22.097 CC
26.95 2016-07-06 10:26:04.507 CC
14.99 2011-12-15 17:53:17.527 CC
15.99 2014-04-09 11:51:27.377 CC
Теперь мне нужно суммировать (сумма) с 01 января по 31 марта каждого года.
Комментарии:
1. Каков ожидаемый результат
2. что вы подразумеваете под суммой? не могли бы вы быть более понятными?
3. вы можете получить «квартал», скорректированный на високосные годы по формуле (месяц (dob) — 1) / 3 1 В моем случае датой является dob, но вы можете подключить любую дату — сообщите нам, если есть какие-либо другие факторы, которые вы рассматриваете здесь — возможно, вы хотитезнаете, сколько дней в любом заданном «квартале»?
4. Я отредактировал свой вопрос…. Я надеюсь, что это будет полезно
5. @VinayakaN — Как определить
month
.
Ответ №1:
DATEDIFF(dd, @from, @to)
Это даст вам количество дней между двумя датами
Комментарии:
1. Если я использую функцию datediff, я должен указать дату вручную….. Я не должен вводить вручную, это должно быть автоматически…….
Ответ №2:
как насчет
SELECT SUM(amount) as FirstQamount
FROM C_Payment_Service_Fee
WHERE MONTH(crn_dt) IN (1,2,3)
это приближает вас к этому?
Ответ №3:
Формулировка «каждый год» немного неясна — я не могу сказать, хотите ли вы, чтобы они были сгруппированы по годам или нет.
Если вы просто хотите, чтобы все суммы за январь-март были одной единовременной суммой:
SELECT SUM(amount) AS total_amount
FROM c_payment_service_fee
WHERE MONTH(crn_dt) BETWEEN 1 AND 3;
Если вы хотите просмотреть итоги за январь-март для каждого года отдельно, добавьте год и предложение GROUP BY:
SELECT SUM(amount) AS total_amount, YEAR(crn_dt) as crn_yr
FROM c_payment_service_fee
WHERE MONTH(crn_dt) BETWEEN 1 AND 3
GROUP BY YEAR(crn_dt);
Имейте в виду, что функция MONTH() в предложении WHERE сделает запрос не подлежащим обработке. SQL Server не сможет оценить предложение WHERE, не извлекая каждое значение crn_dt, а затем запустив для них MONTH() . Чем больше базовая таблица, тем хуже будет снижение производительности из-за отсутствия совместимости.