Вы не предоставили данные, так что вот пример, основанный на фиктивных данных. Как уже упоминалось в комментариях, вам необходимо использовать функцию DATEDIFF. Но прежде чем вы узнаете количество дней между датами, вы должны добавить 14
к дате счета-фактуры с помощью функции DATEADD. Это даст вам обратный отсчет эффекта вам нужно:
;WITH invoices AS (
SELECT 1 as invoice_num,
'2016-07-10' as invoice_date,
1 as invoice_status
UNION ALL
SELECT 2,
'2016-07-01',
1
UNION ALL
SELECT 3,
'2016-07-12',
2
UNION ALL
SELECT 4,
'2016-07-18',
2
), invoice_statuses AS (
SELECT 1 as invoice_status,
'un-processed' as status_description
UNION ALL
SELECT 2,
'partially processed'
)
SELECT i.invoice_num,
i.invoice_date,
s.status_description,
DATEDIFF(day,GETDATE(),DATEADD(day,
CASE WHEN i.invoice_status = 1 THEN 14
WHEN i.invoice_status = 2 THEN 7
ELSE 0 END
,i.invoice_date)) as days_left
FROM invoices i
LEFT JOIN invoice_statuses s
ON s.invoice_status = i.invoice_status
выход будет:
invoice_num invoice_date status_description days_left
1 2016-07-10 un-processed 4
2 2016-07-01 un-processed -5
3 2016-07-12 partially processed -1
4 2016-07-18 partially processed 5
Если изменить GETDATE()
на 2016-07-21
выходе будет:
invoice_num invoice_date status_description days_left
1 2016-07-10 un-processed 3
2 2016-07-01 un-processed -6
3 2016-07-12 partially processed -2
4 2016-07-18 partially processed 4
Я думаю, что вы ищете для 'lateiff()' – HoneyBadger
@HoneyBadger Можете ли вы показать мне, как я мог бы это сделать, я новичок в языке sql –