2011-09-22 17 views
0

私はここの新しいユーザーです。これはすごいですね! 少し助けが必要です:Oracle - count()in same line

私はこれをしますが、私が望むように動作しません! (数(countOfCat)は良いではありません!)

select count(countOfCat) as "Cat", count(countOfDog) as "dog", count(countOfHorse) as "horse", 0 as "duck", 0 as "Mouse" 
from animal 
where Birthdate in 
     (... 
     -- i think not important 
     ... 
     ) 
     and (species= 'cat' or species= 'dog' or species= 'horse') 
group by species 

私はこの

 
Cat     Dog     Horse   Duck   mouse 
------- ------- ------- ------ ------- 
1234    2345    3456     0      0 

のように受信したいよ...

私はすべてのカウントが同じであることを必要とします行。私はこの

 
noGood- Cat Dog  Horse Duck mouse 
noGood- ----- ------ -------- ------- ------- 
noGood- 1234 0  0  0   0 
noGood- 0  2345 0  0   0 
noGood- 0  0  3456 0   0 

を利用することはできません
はyoutは時間をありがとう!
Da!

+0

あなたは、元のテーブルのサンプルデータを提供することができますしてください? –

+0

は「種」はあなたの列名ですか?? 「猫」、「犬」、「馬」は、その列のあなたの価値ですか? –

+0

@ Yagnesh:はいの種は列の名前です、そしてyes catの犬と馬は、私の値の種別の列(の部分文字列)です。 ありがとう @ダリル:これはビッグシステムの小さな翻訳です。私はこの選択をマテリアライズドビューに入れる必要がありますが、私は大きなテーブルがあることを十分に知っていることを願っています: "動物" "、そして猫の馬のアヒルは種の価値です。 私は "生まれた"もう一つの重要な列を持っており、私は2歳の動物だけを選択しなければならない(しかし、私はこれを行うことができます:D) ありがとう – BellaVita

答えて

1

私はあまりにもあなたがここで新しいことを驚くと思う。 :D

select 
    (select count(*) from animal a where a.species = 'cat') as Cat, 
    (select count(*) from animal a where a.species = 'horse') as Horse, 
    (select count(*) from animal a where a.species = 'duck') as Duck 
from 
    dual 

NB:dualは、常に単一の行を持つシステム・テーブルです。このようなトリックにはとても便利です。

+0

ありがとう!私はこのコードを試していますが、この選択をマテリアライズド・ビューとより多くの組合に入れなければなりません。これは私の選択の構造を変え、少し問題があります。 :( – BellaVita

+0

あなたはテーブルを3回クエリしますが、1回だけ必要です。a_horse_with_no_nameはより良い解決策を持っています – winkbrace

+0

はい、その理由を私は解答してコメントを残しました。 – GolezTrol

6
select sum(case when species = 'cat' then 1 else 0 end) as "Cat", 
     sum(case when species = 'dog' then 1 else 0 end) as "Dog", 
     sum(case when species = 'horse' then 1 else 0 end) as "Horse", 
     0 as "duck", 
     0 as "Mouse" 
from animal 
where species in ('cat', 'dog', 'horse') 
+0

本当にありがとう、私はあなたのコードを試していたが、結果は2行で、結果は同じように "11 22 33 0のようにする必要があります0 "、私は間違っていますか? – BellaVita

+0

私は間違っています!私はグループごとに種を入れました!仕事でグループを取り消すと非常に良い!!!!!!!!!! D:D:Dありがとうございました!!! :: D:D:D – BellaVita

+0

+1状況によっては、私の解決策よりはるかに良いでしょう。 – GolezTrol

0

非常に単純です。 あなたがする必要があるのは、group by句を削除します:D

select count(countOfCat) as "Cat", count(countOfDog) as "dog", count(countOfHorse) as "horse", 0 as "duck", 0 as "Mouse" 
from animal 
where Birthdate in 
     (... 
     -- i think not important 
     ... 
     ) 
     and (species= 'cat' or species= 'dog' or species= 'horse') 
+0

本当に私はグループごとに2時間を過ごしますか?ohhhhhhhh everybodyに感謝!このページは素晴らしいです!:D – BellaVita