ORACLEで1回のSELECT文の発行で、抽出された件数を合わせて取得するようなSQL文って記述できるのでしょうか?

そもそもSQLでは不可能な話なのでしょうか?

回答の条件
  • 1人3回まで
  • 登録:2006/06/28 15:59:20
  • 終了:2006/06/28 17:02:51

ベストアンサー

id:SG5-NA No.1

SG5-NA回答回数18ベストアンサー獲得回数32006/06/28 16:12:11

ポイント50pt

いろいろなパターンが想像されますが、

一番簡単なパターンで

・対象テーブル:商品マスタ

・抽出条件:商品コードが'1'で始まる

の場合

select A.商品コード, B.件数

from 商品マスタ A,

(select count(*) 件数 from 商品マスタ) B

where A.商品コード like '1%'

になるかと。

結果セットの全件に「件数」が出てきてしまいますが

id:maq

結果セットの全件に「件数」が出てきても問題ありません:)

2006/06/28 16:52:32

その他の回答(2件)

id:SG5-NA No.1

SG5-NA回答回数18ベストアンサー獲得回数32006/06/28 16:12:11ここでベストアンサー

ポイント50pt

いろいろなパターンが想像されますが、

一番簡単なパターンで

・対象テーブル:商品マスタ

・抽出条件:商品コードが'1'で始まる

の場合

select A.商品コード, B.件数

from 商品マスタ A,

(select count(*) 件数 from 商品マスタ) B

where A.商品コード like '1%'

になるかと。

結果セットの全件に「件数」が出てきてしまいますが

id:maq

結果セットの全件に「件数」が出てきても問題ありません:)

2006/06/28 16:52:32
id:SG5-NA No.2

SG5-NA回答回数18ベストアンサー獲得回数32006/06/28 16:14:56

ポイント50pt

※ポイント不要

すいません、上の間違ってました。

select A.商品コード, B.件数

from 商品マスタ A,

(select count(*) as 件数 from 商品マスタ) B

where A.商品コード like '01%'

and B.商品コード like '01%'

AとBに同じ条件付けないとだめですね

id:maq

B.商品コードを知らないと怒られるのですが…。

何か間違って理解しているのでしょうか?

2006/06/28 16:51:53
id:katsube No.3

katsube回答回数133ベストアンサー獲得回数72006/06/28 16:24:17

ポイント25pt

副問合せで2列分を取得するか、UNIONで2本同時にselectを実行するという方法があります。

○副問合せ

select A.kensu, B.kensu

from (select count(*) as kensu from X) A, (select count(*) as kensu from Y) B;

○UNION

select count(*) from X

union

select count(*) from Y



もしかしたら、合算されることを想定されていらっしゃるのでしょうか??

select A.kensu + B.kensu

from (select count(*) as kensu from X) A, (select count(*) as kensu from Y) B;

な感じで和を取得することも可能です。

id:maq

件数と同時に内容も抽出したいのですが…。

その場合にも有効な方法なのでしょうか?

2006/06/28 16:51:10
  • id:maq
    ありがとうございました。
    1番目の回答を元に試行した結果うまくいきました:)。
  • id:maq
    サブクエリってのは不可分なのでしょうか?
    ものすごく微妙なタイミングにおいて、抽出数と件数がずれることはないのでしょうか?
    新たに質問を起こした方が良いかな。
  • id:SG5-NA
    すいません、更に間違っていました。

    select A.商品コード, B.件数
    from 商品マスタ A,
    (select count(*) as 件数 from 商品マスタ
    where 商品コード like '01%') B
    where A.商品コード like '01%'
    です。
    ABともサブクエリにするなら
    select A.商品コード, B.件数
    from (select * from 商品マスタ
    where 商品コード like '01%') A,
    (select count(*) as 件数 from 商品マスタ
    where 商品コード like '01%') B
    です。
    ついでに、
    このままだとAとBは直積です。
    AとBの結合が必要になる場合があります。
    重ね重ねすいません。
  • id:taknt
    抽出項目に rownum を付け加えて 件数は、そのrownumの最大値とすればいい・・・。

    って面倒だ(笑)
  • id:HISI
    私なら、結果セットを一旦一時テーブルに突っ込みます。
    CREATE TEMPORARY TABLE TMP_ABC
    AS SELECT ...

    その後、
    件数はselect count(*) from TMP_ABC
    中身はselect * from TMP_ABC

    あ゛、1回のクエリーで無くなってしまいましたね...

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません