2013-06-24 2 views
0

У меня есть таблица, имеющей структуру следующегоквартала года мудрого результат Filteration в SQL

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 

месяцев 4,5,6 в Q1, 7 , 8,9 в Q2 и т.д.

ответ

1

для того, чтобы сцепить значения из нескольких строк вместе, вам нужно будет реализовать 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 Fiddle with Demo