我已经具有结构的表格如下
id cust_id target month year fiscal_ID
1 234 50 4 2013 1
2 234 50 5 2013 1
3 234 50 6 2013 1
4 234 150 7 2013 1
5 234 150 8 2013 1
6 234 150 9 2013 1
我需要得到的结果如下
cust_id target quarter year fiscal_ID
234 150/450 Q1/Q2 2013 1
在Q1月4,5,6,7,8,9在Q2等
为了从多行串联的值加在一起,你将需要实现FOR XML PATH,与此类似:
;with cte as
(
select t.cust_id,
sum(target) target,
d.qtr,
t.year,
t.fiscal_id
from yourtable t
inner join
(
select 4 mth, 'Q1' qtr union all
select 5 mth, 'Q1' qtr union all
select 6 mth, 'Q1' qtr union all
select 7 mth, 'Q2' qtr union all
select 8 mth, 'Q2' qtr union all
select 9 mth, 'Q2'
) d
on t.month = d.mth
group by t.cust_id, d.qtr, t.year, t.fiscal_id
)
select distinct cust_id,
STUFF(
(SELECT ' / ' + cast(c2.target as varchar(10))
FROM cte c2
where c1.cust_id = c1.cust_id
and c1.year = c2.year
and c1.fiscal_id = c2.fiscal_id
FOR XML PATH (''))
, 1, 2, '') AS target,
STUFF(
(SELECT ' / ' + c2.qtr
FROM cte c2
where c1.cust_id = c1.cust_id
and c1.year = c2.year
and c1.fiscal_id = c2.fiscal_id
FOR XML PATH (''))
, 1, 2, '') AS qtr,
year,
fiscal_id
from cte c1;
请参阅SQL拨弄演示