1

「Sometable」という名前のテーブルに、business_line(値X、Y)とbusiness_segment(値X、Y、Zはbusiness_lineと同じXとY)の2つの列があります。type_of_payment(値A、B、C、D、E)という名前の別の列とtransaction_valueという名前の最後の列があります。これが私がやりたいことです:

business_lineとbusiness_segmentでグループ化されたトランザクションを合計し、これらの支払いのA、C、Eからの割合も調べます。したがって、私の出力テーブルは次のようになります

                                             (last three columns can be named anything
                                              but they specify proportions of A,C,E)  
Business_line       SUM(transaction_value)   A        C        E
and business seg.
X                   100                      20%      30%      50%
Y                   200                      11%      12%      77%     
X                   300                        and so on
Y                   170
Z                   230

どうすればいいですか?

PS:BとDも存在するため、ACEの合計は100%である必要はありません。

4

2 に答える 2

2

これは標準SQLであり、Oracleで動作するはずです(ただしテストされていません)。

SELECT
   business_line,
   business_segment,
   grand_total,
   A_total * 100.0 / grand_total as A,
   C_total * 100.0 / grand_total as C,
   E_total * 100.0 / grand_total as E
FROM
   (
       SELECT
          business_line,
          business_segment,
          SUM(transaction_value) as grand_total,
          SUM(CASE WHEN payment_type = 'A' THEN transaction_value END) as A_total,
          SUM(CASE WHEN payment_type = 'C' THEN transaction_value END) as C_total,
          SUM(CASE WHEN payment_type = 'E' THEN transaction_value END) as E_total
       FROM
          SomeTable
       GROUP BY
          business_line,
          business_segment
    ) as t
于 2012-08-10T08:15:37.390 に答える
2

Oracle 11g以降では、次を使用できます。PIVOT

select *
from
(
select sometable.line, paymenttype,total, 100.0*transaction_value/total as percentage
from sometable
    inner join
    (select line, sum(transaction_value) as total
        from sometable
        group by line) total
    on sometable.line = total.line          
) 
pivot 
(
    sum(percentage) for paymenttype in (a,c,e)
) 
于 2012-08-10T08:21:24.800 に答える