У меня есть следующая таблица в SQL Server 2012 для хранения платежей, полученных за услугу.Это не нормализованная таблица, но я не могу ее изменить.
CREATE TABLE #ServicePaymentCollection (ServiceID INT, ServiceDate DATE, ServiceAmount INT,
PaymentDate DATE, AmountPaid INT)
INSERT INTO #ServicePaymentCollection
SELECT 2, '2017-01-30', 1200, '2017-01-31', 50 UNION
SELECT 2, '2017-01-30', 1200, '2017-02-01', 200 UNION
SELECT 2, '2017-01-30', 1200, '2017-05-20', 200 UNION
SELECT 2, '2017-01-30', 1200, '2017-11-20', 200 UNION
SELECT 2, '2017-01-30', 1200, '2017-12-20', 200 UNION
SELECT 2, '2017-01-30', 1200, '2018-01-10', 200 UNION
SELECT 2, '2017-01-30', 1200, '2018-02-15', 150
Мне нужно перечислить «Разницу в месяц» для каждой строки.Услуга была оказана 30 января 2017 года.Первый платеж был получен 31 января 2017 года.Для этой строки разница в месяце равна 0.
Второй платеж получен в феврале / 01/2017.Для этой строки разница в месяце равна 1.
Следующий запрос работает нормально до тех пор, пока год не будет изменен на 2018 год с 2017 года. Когда платеж получен 10 января 2018 года, он показывает разницу в месяце 100. Какчтобы исправить это.
Примечание. Это упрощенный сценарий для моего реального проекта.
SELECT *, (PaymentYearMonth - ServiceYearMonth) AS MonthDifference
FROM
(
SELECT *,
CONVERT(INT,(CONVERT(VARCHAR(20),YEAR(ServiceDate)) + RIGHT('00'+CONVERT(VARCHAR(20), MONTH(ServiceDate)),2) )) ServiceYearMonth,
CONVERT(INT,(CONVERT(VARCHAR(20),YEAR(PaymentDate)) + RIGHT('00'+CONVERT(VARCHAR(20), MONTH(PaymentDate)),2) )) PaymentYearMonth
FROM #ServicePaymentCollection
)T
ORDER BY MonthDifference
Результат