ホーム   フォーラム   FAQ
 
メインメニュー
ログイン
ユーザー名:

パスワード:


パスワード紛失

SQLで SELECT した行数を知りたい。

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 .3 .4 .5 .6 .7 .8 .9 | 投稿日時 2011-10-3 13:29
satuki6  常連   投稿数: 64
いつも参考にしています。

Unipassから、SQLを発行し、SELECT した結果のデータ行数を知りたいのですがどうすればいいのでしょうか?
SQLRowCountという関数があるようですが、その使い方もわかりません。
宜しくお願いします。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011-10-4 12:18
pu_mahalo  長老 居住地: 大阪  投稿数: 775
こんにちは Puです

SELECT COUNT
FROM hogeoge
WHERE hoge

count で返る値はintです
でわ〜でわ〜
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011-10-5 10:35
KURITA  常連   投稿数: 45
SQLRowCountでは、取得できないのではないでしょうか?
ヘルプには、更新系SQL(UPDATE,INSERT,DELETE)の
更新対象の該当件数を取得するとの記載があります。
SELECTで動くとの記載は見当たりませんでした。
(実働チェックをしていないので実際は
 取得できるかもしれませんが)

良くやる手法としては、pu_mahaloさんの方法になるかと
思われます。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011-10-5 12:25
satuki6  常連   投稿数: 64
ありがとうございます。

SELECT COUNT
FROM hogeoge
WHERE hogeではカウントはとれないのではないでしょうか?

SELECT COUNT(*)
FROM hogeoge
WHERE hoge
だと思いますが、

質問の仕方がまずかったようです。

単に、行数だけを取るのではなくて、
たとえば、
SELECT * FROM xxxxxx
として、データを取得するとともに、
取得した行数を知りたいのです。

宜しくお願いします。







投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011-10-5 15:31
Jiro123  長老   投稿数: 271
SELECT文で、COUNT のような集計関数を使用すると、同時にカラムの値の取得はできないと思います。

例えば、

SELECT COUNT(*) , id , name FROM TABLE1

のように、集計関数と、カラムを記述した SELECT文を実行するとエラーになりますよね。

集計関数は、指定した列の集計計算をした結果を返します。
全レコードに対してであれば、1つの値が返されます。

最終的に行数が取得できればよいのであれば、
ROW_NUMBER 関数(分析関数)を利用して、
レコードに連番を振るようなクエリにするというのはどうでしょう。

SELECT id , name , ROW_NUMBER() OVER (ORDER BY id) AS SEQ
FROM TABLE1

最後のレコードで行数が取得できます。

ORDER BY 句では主キーのカラムを指定します。
主キーが2つ以上の場合は、カンマで区切って指定します。

投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011-10-5 17:36
satuki6  常連   投稿数: 64
ありがとうございます。
ROW_NUMBER() はあまり使いたくないですね!
.NETでのRows.countみたいなものは何故ないのでしょうネ!
不思議です。


投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011-10-5 20:53
tiyn  常連   投稿数: 70
件数が少ないのならば、DbViewSizeとかでもいいと思います。


DBが最近のOracleだと、
select count(1) over() , h.* from hoge h
とかでもいいような気がします。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011-10-6 9:47
pu_mahalo  長老 居住地: 大阪  投稿数: 775
こんにちは Puです

>.NETでのRows.countみたいなものは何故ないのでしょうネ!
>不思議です。

それはDataSetだからなせるのではないでしょうか
同じような仕組みにするなら
仮想的にDataSetと同じ流れにするなら
埋め込みSQLで抽出したレコードを
メモリーテーブルに格納したのち
dbrecs で件数を取得する と言う流れになるのでは


投票数:1 平均点:10.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2011-10-7 10:08
satuki6  常連   投稿数: 64
いろいろありがとうございます。
このあたりはMagicの弱いところだと感じます。
Magicがもっと洗練されたものになることを切望します。

投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011-10-7 10:12
s_nagura  一人前   投稿数: 109
DbViewSize関数で実現できないでしょうか?
http://www.magicsoftware.co.jp/files/magic_help/uniPaaS1Plus/Expression_Editor/DbViewSize.htm

使った事はないので、はずしていたらすみません。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011-10-7 10:24
Tanda  長老   投稿数: 2151
satuki6 さん、こんにちは。

実は、Magic にとっては、埋め込み SQL は単なる付録に過ぎません。
たいていの場合、埋め込み SQL を使用しなくてもアプリが作成できます。

どちらかというと、埋め込み SQL は SQL コマンドしか知らない人達の
ために Magic 側に用意されたようなものだとも言えます。

ですので、Magic のことをだんだん理解していくうちに、SQL コマンドを
使わずにどうやって Magic でアプリを作って行ったらいいかが分かって
くると思います。

頑張ってください。

タンダコンピュータ/丹田 昌信
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011-10-7 16:45
null  長老   投稿数: 191
何だか本題と脱線しているのがアレですがこの件については satuki6 さんの考えと同じく
データ取得の SQL 発行時に件数が取得出来たら良いのにとたまに思います。
「処理件数 / 全体件数」のような表示をしたい場合、現状は一回、
別タスクで SELECT COUNT(*) する必要がありますから・・・

DataSet とは違うのも判るんですが、UPDATE の処理件数を戻り値にセット出来るなら
ついでに SELECT 時も簡単に取得出来る仕組みも欲しいですよねぇ

私も処理速度重視で埋込み SQL を使ってますが、
この辺りも含め簡素にならないものかと思います。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011-10-7 16:53 | 最終変更
satuki6  常連   投稿数: 64
丹田様

いろいろありがとうございます。
色々な考えはあると思いますが「埋め込み SQL は単なる付録」である事が残念ですね!
SQLを使用したほうがパフォーマンスがあがるものは多くあります。プログラムそのものもよりシンプルになります。
SQLを使用してのDBが殆どの時代、その良さを最大限に生かせるよう是非、改善する方向で考えて欲しいものですネ。




投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011-10-7 17:43
Tanda  長老   投稿数: 2151
satuki6 さん、こんにちは。

SQL 文を使ったコーディング等がメインになって行きますと、それは
もうほとんどコーディング言語の世界と同じになってしまって、せっかく
の Magic の良さが損なわれて行ってしまうからです。

Magic の良さは、.NET を知らない人でも、あるいは SQL を知らない
人でも、簡単に業務アプリを構築できるというところにあるからです。

Microsoft でさえ、今、Magic の良さを見直そうとしています。
まだ、ここでは公表はできませんが。。。

タンダコンピュータ/丹田 昌信
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011-10-7 18:14
05540  新米   投稿数: 19
Tandaさん、こんにちは。

通りすがりです。

> Microsoft でさえ、今、Magic の良さを見直そうとしています。
> まだ、ここでは公表はできませんが。。。

LS絡みですか?

いえ、NoResで構いません。


失礼しました。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011-10-7 18:23
Tanda  長老   投稿数: 2151
05540 さん、こんにちは。

うっ!^^;


タンダコンピュータ/丹田 昌信
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011-10-7 18:25
satuki6  常連   投稿数: 64
ありがとうございます。

VB.NETでもクエリーをコーディングしないでプログラムは作成できますね。Accessも同じです。
しかし、クエリーも使ってより自由度のあるアプリを作成できるようになっています。

.NET を知っている人、あるいは SQL を知っている人は、それをより有効に使えればいいのではないでしょうか?
簡単に業務アプリを構築できるのがMagicの良さが、そこまでで留まるのはもったいないですね!
更に良くすれと思います。



投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011-10-7 18:42
05540  新米   投稿数: 19
Tandaさん、こんにちは。


> うっ!^^;

ほう! (^^
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011-10-7 18:51
Tanda  長老   投稿数: 2151
05540 さん、こんにちは。

最近の MS は、uniPaaS をすごい意識しているみたいですよ。
ただし、アメリカでの話ですが。。。

日本の MS は相変わらず、のんきなものです。

ところで、05540 さんって、どなたでしょうか?
過去ログを見てみると、すごい古い話もご存知のようですし。。。

あ、NoRes で構いません。^^;

タンダコンピュータ/丹田 昌信
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011-10-10 9:25
05540  新米   投稿数: 19
Tandaさん、こんにちは。


> ところで、05540 さんって、どなたでしょうか?
> 過去ログを見てみると、すごい古い話もご存知のようですし。。。

Nifty時代はLDI02324と名乗っていました。(^^

まぁ、そんなところで・・・。




投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011-10-10 10:14
Tanda  長老   投稿数: 2151
05540 さん、こんにちは。

分かりました。

いつも、お世話になっております。(^^;

タンダコンピュータ/丹田 昌信
投票数:0 平均点:0.00

  条件検索へ


Copyright (C) Magic Software Japan K.K. All Rights Reserved.
個人情報保護方針 会員規約