0

次のような構造のテーブルがあります

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

第 1 四半期に 4、5、6 か月、第 2 四半期に 7、8、9 か月など

4

1 に答える 1

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 を参照してください

于 2013-06-24T16:10:19.433 に答える