4

次のような select ステートメントがあります。

select trim(time), type, count(1) from table                             
group by trim(time),type

結果は次のとおりです。

02.10.13    REZ1    1

02.10.13    REZ2    5

02.10.13    REZ3    3

次の結果を得るために、いくつかのOracle関数を使用していくつかの選択ステートメントを作成することは可能ですか:

REZ1    REZ2    REZ3

1       5       3

したがって、1 つの列からの結果は、次のような他のステートメントの列名になります。

select ?SOMETHING? 
from (
select trim(time), type, count(1) 
from table                             
group by trim(time),type) s
4

4 に答える 4

0

おそらく、これに代わる SQL を試すことができます。

SELECT MAX(CASE type
                WHEN 'REZ1' THEN cnt
                ELSE NULL
           END) AS REZ1,
       MAX(CASE type
                WHEN 'REZ2' THEN cnt
                ELSE NULL
           END) AS REZ2,
       MAX(CASE type
                WHEN 'REZ3' THEN cnt
                ELSE NULL
           END) AS REZ3
  FROM (SELECT trim(time), type, count(1) as cnt FROM table
        GROUP BY trim(time), type);

またはさらに良い:

SELECT COUNT(CASE type
                 WHEN 'REZ1' THEN 1
                 ELSE NULL
             END) AS REZ1,
       COUNT(CASE type
                 WHEN 'REZ2' THEN 1
                 ELSE NULL
             END) AS REZ2,
       COUNT(CASE type
                 WHEN 'REZ3' THEN 1
                 ELSE NULL
             END) AS REZ3
  FROM table;

出力:

REZ1 | REZ2 | REZ3
1    | 5    | 3

これは、列の値がわかっている場合に適用できtypeます。11g で使用できる でさえpivot、ajmalmhd04 の回答で説明されているように、これをピボットするには、列の値を知る必要があります。

于 2013-10-30T10:39:15.673 に答える
0
select trim(time), 
       count(decode(type, 'REZ1', 1)) AS REZ1,
       count(decode(type, 'REZ2', 1)) AS REZ2,
       count(decode(type, 'REZ3', 1)) AS REZ3
  from table                             
 group by trim(time)
于 2013-12-11T16:57:11.543 に答える