我有一张这样的付款表
Contract_Code Payment_Year Payment
470 2010 100
470 2015 50
470 2017 100
471 2011 60
471 2017 100
471 2018 100
我需要查看它,但是例如如果年份在2015年之后,则将付款的行合并为一个,就像这样
Contract_Code Payment_Year Payment
470 2010 100
470 2015-2019 150
471 2011 60
471 2015-2019 200
有可能这样做吗?如何?
答案 0 :(得分:0)
请尝试以下代码-
SELECT Contract_Code,
CASE
WHEN YEAR(Payment_Year) >= 2015 THEN '2015-2019'
ELSE CAST(YEAR(Payment_Year) AS VARCHAR)
END Payment_Year,
SUM(Payment)
FROM payments
GROUP BY Contract_Code,
CASE
WHEN YEAR(Payment_Year) >= 2015 THEN '2015-2019'
ELSE CAST(YEAR(Payment_Year) AS VARCHAR)
END
您可以检查DEMO HERE
答案 1 :(得分:0)
---CREATE TABLE---
create table #payments(Contract_Code int,Payment_Year int,Payment int)
-----INSERT VALUES---
insert into #payments
values('470','2010','100'),('470','2015','50'),('470','2017','100'), ('471','2011','60'),('471','2017','100'),('471','2018','100')
----SELECT---
select contract_code,convert(varchar,payment_year)payment_year,payment from #payments
where payment_year<2015
union
select contract_code
,case when max(payment_year)>=2015 then convert(varchar,min(payment_year))+'-
'+convert(varchar,MAX(payment_year)) end payment_year
,sum(payment) from #payments where payment_year>=2015
group by contract_code
答案 2 :(得分:0)
case
计算中需要一个year
表达式。您可以使用APPLY
:
SELECT p.Contract_Code, v.payment_year, SUM(p.Payment)
FROM payments p
(VALUES (CASE WHEN p.Payment_Year >= 2015 THEN '2015-2019' ELSE CONVERT(VARCHAR(9), p.Payment_Year) END)
) v(payment_year)
GROUP BY Contract_Code, v.payment_year;