1

誰かが o/p を下回るようにクエリを設計するのを手伝ってくれませんか。

私が持っているデータ:

Table X:
Count Name Amount Days 
5     ABC  500    Day1
10    ABC  1000   Day2
3     BCD  100    Day1
4     BDC  200    Day2

私が必要とする結果:

Name  Count AmountDay1 Count AmountDay2
ABC   5     500         10   1000
BCD   3     100         4    200

これは可能ですか?

以下のクエリで何かを試しましたが、目的の o/p が得られませんでした

select * from X
pivot
(sum(amount) for days in ('Day1', 'Day2'))

私はOracle 11 Gを使用しています

4

2 に答える 2

0

Countと の 2 つの列をピボットしたいのでAmount、CASE 式で集計関数を使用して結果を取得する方が簡単な場合があります。

select name,
  sum(case when days = 'Day1' then "count" else 0 end) CountDay1,
  sum(case when days = 'Day1' then amount else 0 end) AmountDay1,
  sum(case when days = 'Day2' then "count" else 0 end) CountDay2,
  sum(case when days = 'Day2' then amount else 0 end) AmountDay2
from tableX
group by name;

デモで SQL Fiddle を参照してください

PIVOT 関数を使用する場合は、最初にAmountとの 2 つの列のピボットを解除します。Count

select name, CountDay1, AmountDay1, CountDay2, AmountDay2
from 
(
  select name, col||days as col, value
  from tableX
  unpivot
  (
    value
    for col in ("Count", Amount)
  ) u
) d 
pivot
(
  sum(value)
  for col in ('CountDay1' as CountDay1, 'AMOUNTDay1' as AmountDay1, 
              'CountDay2' as CountDay2, 'AMOUNTDay2' as AmountDay2)
) piv;

デモで SQL Fiddle を参照してください

于 2013-10-21T21:51:07.780 に答える