sql >> データベース >  >> RDS >> Sqlserver

SQLでの四半期ごとの結果フィルタリング

    複数の行の値を連結するには、次のような 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 を参照してください。




    1. Oracleが複数列の条件を持つレコードを選択

    2. MySQLチュートリアル–マスターバリューの背後にある秒数を理解する

    3. ODBCレイヤーのテスト

    4. シェルスクリプトでSQLを実行する方法