2013-10-21 89 views
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^

回答

0

既然你想在轉動兩列CountAmount,可能更容易使用具有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 with Demo

如果你想使用的旋轉功能,那麼你將要unpivot的兩列AmountCount,第一:

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 with Demo

+0

感謝bluefeet,它完美地適用於我的scneario。 – user2904845

0

需要轉動兩個列數和數量:

select * from x PIVOT (min(count)as count,sum(amount)for d ays in('Day1','Day2'))