電子書籍の厳選無料作品が豊富!

はまっています。お知恵を貸してください。
Oracle8i WindowsNT4.0です。

tbl_testというテーブルがあります。
データが以下のように入っています。

col1   col2   col3
---------------------------------
A     B     C
     A
B     A     A
C

この時、col1 col2 col3それぞれのカラムの中で、
Aという値が何個あるか数えたいのです。
今は以下のように三つにわけてセレクトしていますが、
これをひとつの式にまとめたいのですが、可能でしょうか?
UNIONしても欲しい答えは返ってきません。

===========================
SELECT COUNT(col1) AS col1
FROM tbl_test
WHERE col1 = 'A'
===========================
SELECT COUNT(col2) AS col2
FROM tbl_test
WHERE col2 = 'A'
===========================
SELECT COUNT(col3) AS col3
FROM tbl_test
WHERE col3 = 'A'

欲しい答えは、
col1   col2   col3
-----------------------
1     2     1

です。

なお、家に検証環境が無いので、検証&お礼は明日のお昼くらいになると思います。
宜しくお願い致します。

A 回答 (4件)

間違えました。

合計値をほしいわけじゃないんですね(^^;;

こちらです。
select t1.col, t2,col, t3.col from
( SELECT count(col1) col
FROM tbl_test
WHERE col1 = 'A' ) t1,
( SELECT count(col2) col
FROM tbl_test
WHERE col2 = 'A' ) t2,
( SELECT count(col3) col
FROM tbl_test
WHERE col3 = 'A' ) t3
    • good
    • 0
この回答へのお礼

ばっちりです。
どうもありがとうございました!

お礼日時:2002/09/12 12:50

SELECT


  SUM(DECODE(col1,'A',1,0)) AS col1,
  SUM(DECODE(col2,'A',1,0)) AS col2,
  SUM(DECODE(col3,'A',1,0)) AS col3
FROM tbl_test

でどうでしょうか?
テストしていませんが、こんな感じで出来たと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
検証したのですが、少し違う値が返ってくるようです。
意味がわかっていないので、時間のあるときに調べてもう一度やってみようと思います。
知らない使い方なので勉強になりました。

お礼日時:2002/09/12 12:54

(オラクルは使ったことがないので、固有の部分は適宜修正してください。



select sum(sum_col1) as col1
    ,sum(sum_col2) as col2
    ,sum(sum_col3) as col3
from (select count(*) as sum_col1
       ,0 as sum_col2
       ,0 as sum_col3
   from tbl_test where col1='A'
   
   union all
   select 0 as sum_col1
       ,count(*) as sum_col2
       ,0 as sum_col3
   from tbl_test where col2='A'

   union all
   select 0 as sum_col1
       ,0 as sum_col2
       ,count(*) as sum_col3
   from tbl_test where col3='A'
);

もっとすっきりしたSQLがあると思いますが、取り急ぎ回答します。
    • good
    • 0
この回答へのお礼

ありがとうございます。
いろんな方法があるのですね。勉強になります。

お礼日時:2002/09/12 12:52

union allにしてます?



select count(*) from
(
SELECT col1 col
FROM tbl_test
WHERE col1 = 'A'
union all
SELECT col2 col
FROM tbl_test
WHERE col2 = 'A'
union all
SELECT col3 col
FROM tbl_test
WHERE col3 = 'A'
);
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!