0

私は助けを求めたい..私はこのテーブルを持っています

user_id  | Metric_1 | Metric_2 | Metric_3
------------------------------------------
1        | Jan      | 10       | yes
2        | Feb      | 10       | No
3        | Mar      | 20       | No
4        | Apr      | 30       | No
5        | May      | 40       | yes
6        | Jun      | 50       | No
7        | Jul      | 60       | No
8        | Aug      | 70       | yes
9        | Sep      | 80       | No
10       | Oct      | 90       | yes
11       | Nov      | 10       | No
12       | Dec      | 20       | No

この結果をクエリで取得したいのですが、postgres tablefunc クロスタブを使用していますが、この結果を得ることができます...助けていただければ幸いです

| January | February | March | April | May
 ---------------------------------------------------
| 10      | 10       | 20    |30     |40
| yes     | NO       | No    |yes    |No
4

1 に答える 1

2

このタイプの変換では、データのピボットを解除してからピボットできます。アンピボットの場合、クエリを使用してから、式を含む集計関数を適用してデータをピボットできます。UNION ALLCASE

select 
  max(case when metric_1 ='Jan' then value end) as Jan,
  max(case when metric_1 ='Feb' then value end) as Feb,
  max(case when metric_1 ='Mar' then value end) as Mar,
  max(case when metric_1 ='Apr' then value end) as Apr,
  max(case when metric_1 ='May' then value end) as May,
  max(case when metric_1 ='Jun' then value end) as Jun,
  max(case when metric_1 ='Jul' then value end) as Jul,
  max(case when metric_1 ='Aug' then value end) as Aug,
  max(case when metric_1 ='Sep' then value end) as Sep,
  max(case when metric_1 ='Oct' then value end) as Oct,
  max(case when metric_1 ='Nov' then value end) as Nov,
  max(case when metric_1 ='Dec' then value end) as "Dec"
from
(
  select user_id, metric_1, cast(metric_2 as varchar(10)) as value, 'Metric2' as col
  from yourtable
  union all
  select user_id, metric_1, metric_3 as value, 'Metric3' as col
  from yourtable
) src
group by col
order by col

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

結果は次のとおりです。

| JAN | FEB | MAR | APR | MAY | JUN | JUL | AUG | SEP | OCT | NOV | DEC |
-------------------------------------------------------------------------
|  10 |  10 |  20 |  30 |  40 |  50 |  60 |  70 |  80 |  90 |  10 |  20 |
| yes |  No |  No |  No | yes |  No |  No | yes |  No | yes |  No |  No |
于 2013-01-29T16:30:47.363 に答える