4

テーブル内の男性と女性の俳優の数をカウントするクエリを作成しています。私の現在の声明はそのようなものです:

Select COUNT(ActorGender) “Male Actors” 
from (tblActor ta WHERE ta.ActorGender in(‘m’)
UNION
Select COUNT(ActorGender) “Female Actors” 
from tblActor ta 
WHERE ta.ActorGender in(‘f’);

出力は次のようになります。

Male Actors
-----------
          7
         21

出力を次のようにしたいと思います。

Male Actors   Female Actors
-----------   -------------
          7              21

CASEWHEN句またはTHEN句を使用せずにこれを実行するための代替手段を探しています。

いつものように助けてくれてありがとう。

4

4 に答える 4

9

別の方法 (CASE式なし):

SELECT 
  ( SELECT COUNT(*)
    FROM tblActor 
    WHERE ActorGender = 'm' 
  ) AS MaleActors
, ( SELECT COUNT(*)
    FROM tblActor 
    WHERE ActorGender = 'f' 
  ) AS FemaleActors
FROM 
    dual ;

CROSS結合を使用したその他のソリューション:

SELECT m.MaleActors, f.FemaleActors
FROM 
  ( SELECT COUNT(*) AS MaleActors
    FROM tblActor 
    WHERE ActorGender = 'm' 
  ) m
  CROSS JOIN
  ( SELECT COUNT(*) AS FemaleActors
    FROM tblActor 
    WHERE ActorGender = 'f' 
  ) f  ;
于 2012-11-27T20:53:20.133 に答える
8

これは次のようになります。

SELECT  COUNT(CASE WHEN ActorGender = 'm' THEN 1 ELSE NULL END) MaleActors,
        COUNT(CASE WHEN ActorGender = 'f' THEN 1 ELSE NULL END) FemaleActors
FROM tblActor 
WHERE ActorGender IN ('m','f')
于 2012-11-27T20:32:43.490 に答える
5

Oracle 11g+ を使用している場合は、次を使用できますPIVOT

select *
from
(
  select actorgender
  from tblActor
) src
pivot
(
  count(actorgender)
  for actorgender in ('m' MaleActors, 'f' FemaleActors)
) piv

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

結果は次のようになります。

| MALEACTORS | FEMALEACTORS |
-----------------------------
|          4 |            5 |

または、 a を使用しCROSS JOINて同じ結果を得ることができます。

select m.MaleActors, f.FemaleActors
from 
(
  select count(ActorGender) MaleActors, 'm' Gender
  from tblActor
  where ActorGender = 'm'
) m
cross join
(
  select count(ActorGender) FemaleActors, 'f' Gender
  from tblActor
  where ActorGender = 'f'
) f
于 2012-11-27T21:02:23.470 に答える