1

こんにちは、私はこのようなテーブルを持っています

C_DATE     SOURCE
11/21/2012  A
11/22/2012  A
11/22/2012  A
11/22/2012  A
11/23/2012  A
11/23/2012  A
11/25/2012  A
11/26/2012  A
11/26/2012  B
11/26/2012  B
11/26/2012  B
11/21/2012  B
11/22/2012  B
11/22/2012  B
11/23/2012  B
11/23/2012  C
11/24/2012  C
11/24/2012  C
11/24/2012  C
11/24/2012  C
11/25/2012  C

次のように、ソース別および日付別のカウントを取得するにはどうすればよいですか:
c_dateソース a ソース b ソース c

11/21/2012 1 4 0 
11/22/2012 1 1 1 
11/23/2012 0 0 1
11/24/2012 and so on..

私が持っている最も近いものは次のようなものです

 select trunc(c_date)  XDATE,  
        (select count(**) from TABLE where source='A') A, 
        (select count(**) from TABLE where source='B') B, 
        (select count(*) from TABLE where source='C') C
 from TABLE
group by trunc(C_DATE) 
order by trunc(C_DATE) asc 

しかし、各行の合計数を繰り返します。カウント列を日付に関連付ける方法が見つかりません。

助けてくれてどうもありがとう

4

1 に答える 1

1
select trunc(c_date)  XDATE,  
       sum(case source when 'A' then 1 else 0 end) cnt_a,      
       sum(case source when 'B' then 1 else 0 end) cnt_b,
       sum(case source when 'C' then 1 else 0 end) cnt_c,
  from TABLE
 group by trunc(C_DATE) 
 order by trunc(C_DATE) asc 

11gを使用している限り、最新のピボット句を使用できます:)

select xdate, a, b, c
  from 
(select trunc(c_date) XDATE, source, count(*) 
   from tab 
  group by trunc(c_date), source )     
   pivot 
( count(*) for source in ('A' a, 'B' b, 'C' c) )
order by 1;

http://sqlfiddle.com/#!4/d0269/16

于 2012-12-05T17:55:47.417 に答える