• ベストアンサー

SQLで件数分SELECT結果を取得するには

SQLSERVERのSQLで以下の【期待する結果】を取得する方法はありますか? SELECT NAME,COUNT FROM CLASSROOM 【結果】 AAA,2 BBB,1 CCC,3 【期待する結果】 AAA AAA BBB CCC CCC CCC よろしくお願いします。

  • torum
  • お礼率61% (19/31)

質問者が選んだベストアンサー

  • ベストアンサー
  • wingtodo
  • ベストアンサー率56% (9/16)
回答No.3

DECLARE @RESULT TABLE( NAME varchar(10) ) DECLARE NAMEs CURSOR FOR SELECT NAME FROM @CLASSROOM DECLARE @NAME varchar(10) DECLARE @iCount int DECLARE @i int OPEN NAMEs FETCH NEXT FROM NAMEs INTO @NAME WHILE (@@FETCH_STATUS = 0) BEGIN SET @i = 0 SELECT @iCount = [COUNT] FROM @CLASSROOM WHERE NAME = @NAME WHILE @i < @iCount BEGIN INSERT INTO @RESULT(NAME) VALUES(@NAME) SET @i = @i + 1 END FETCH NEXT FROM NAMEs INTO @NAME END CLOSE NAMEs DEALLOCATE NAMEs SELECT * FROM @RESULT こんなのどうでしょう。

その他の回答 (2)

  • t_ohta
  • ベストアンサー率38% (5040/13168)
回答No.2

SELECT NAME FROM CLASSROOM じゃだめですか?

  • maiko0333
  • ベストアンサー率19% (840/4403)
回答No.1

select name from classroom where count=1 union select name from classroom where count=2 union select name from classroom where count=2 union select name from classroom where count=3 union select name from classroom where count=3 union select name from classroom where count=3 くらいしか思いつきませんね。

関連するQ&A

  • select文の表示結果を置き換える

    sql初心者です、皆様ご教授お願いいたします。 以下のようなselect文の結果が・・・ select aaa,bbb,ccc from XXX order by aaa 以下のようになった場合・・・ 埼玉 100 AAA 東京 200 BBB 東京 200 CCC 東京 300 CCC 千葉 400 CCC 以下のような表示を行う事はsqlで可能でしょうか? 埼玉 100 AAA 東京 200 BBB (〃)(〃) CCC (〃) 300 (〃) 千葉 400 (〃) つまり「一つ前のレコードと同じ結果だった項目は”〃”等の任意の文字列を出力する」です。 宜しくお願いいたします。

  • SQL文の書き方

    SQL文の書き方を教えて下さい。 以下の2つのクエリー(1のクエリー&2のクエリー)を1つのクエリーで1度に抽出をかけたいのですがSQL文の書き方がわかりません。 データの発生条件としては TableBのField1は必ずTableAのField1に存在するという条件です。 TableAのField1が「AAA」から「EEE」まである場合は、TableBのField1も必ず「AAA」から「EEE」の範囲内で発生します。 よろしくお願い致します。 1のクエリー ---------------------------------------------------------------- TableA Field1 ---------------------------------------------------------------- AAA AAA AAA BBB BBB CCC DDD DDD EEE EEE EEE ---------------------------------------------------------------- Field1をサマライズしてカウントと名称を取得するクエリー Select Count(TableA.Field1) as RecCount, TableA.Field1 From TableA 結果 RecCount  Field1 3      AAA 2      BBB 1      CCC 2      DDD 3      EEE ---------------------------------------------------------------- 2のクエリー ---------------------------------------------------------------- TableB Field1 ---------------------------------------------------------------- BBB CCC CCC EEE ---------------------------------------------------------------- Field1をサマライズしてカウントと名称を取得するクエリー Select Count(TableB.Field1) as RecCount, TableB.Field1 From TableB 結果 RecCount  Field1 1      BBB 2      CCC 1      EEE ---------------------------------------------------------------- 希望する結果 TableAのRecCount TableBのRecCount TableAのField1 3                   AAA 2         1         BBB 1         2         CCC 2                   DDD 3         1         EEE

  • AccessのSELECT文の結果でナンバリングする方法

    Access2000のクエリで、以下のSQL文を作っています。  SELECT TB.項目1, TB.項目2, TB.項目3  FROM TB  ORDER BY TB.項目1, TB.項目2; テーブルには、以下のデータが登録されています。  項目1 項目2 項目3  ----------------------  あああ 345 CCC  いいい 234 AAA  あああ 123 BBB 現在のクエリ結果表示は以下のようになっています。  項目1 項目2 項目3  ----------------------  あああ 123 BBB  あああ 345 CCC  いいい 234 AAA これを、以下のようにナンバリングをつけて結果表示するSQL文を教えていただけないでしょうか?  No 項目1 項目2 項目3  ----------------------  1 あああ 123 BBB  2 あああ 345 CCC  3 いいい 234 AAA

  • selectでテーブルから2つの値を引っ張る

    table 123 id name ------- 1 aaa 2 bbb 3 ccc table 987 from to ------- 1 2 2 3 3 1 という表があります。これを from to ------- aaa bbb bbb ccc ccc aaa という様に表示させるためのSQL分がわかりません。 1つの表から2つを引っ張るのはどうすればいいのでしょうか?

  • 重複レコードの抽出について

    以下のようなテーブルからmailが重複していてnameの値が全て同じ値を持つレコードを取得するためのSQL文を教えてください。 mail | name ----------- aaa | 01 aaa | 01 aaa | 01 bbb | 02 bbb | 02 bbb | 01 ccc | 01 ccc | 01 ccc | 02 select * from test where mail in (select mail from test where mail group by mail having count(mail)>1) 上記のSQL文だと以下のデータが取得されてしまいます。 ↓ mail | name ----------- aaa | 01 ○ aaa | 01 ○ aaa | 01 ○ bbb | 02 × bbb | 02 × ccc | 01 × ccc | 01 × ○印のみ取得したいのですが、 SQL文をどのように修正すればよいのでしょうか。 よろしくお願いいたします。

  • SQL 件数取得を速くしたい

    SQLでテーブルなどからSELECTされた件数を得る際に、 select count(*) from ~ 等とするかと思いますが、この結果が返ってくるのが遅くて困っています。 少しでも速く件数を得たいのですがどのような方法がありますでしょうか? 教えてください。 私が使っている環境はOracle 8iで 特に今回はgroup byを含むビューからの検索を行おうとしています。

  • SELECT分での結果の取り出し方

    以下の様なテーブルから SELECT分で条件をWHERE CODE = '0001' の様に指定して 求まった結果を1つの文字列にしたいのですが 良い方法がありましたら、教えて下さい。 SELECT * from testtbl; CODE NAME ------------------------------- 0001 AAAA 0001 BBBB 0002 CCCC 0003 DDDD この例だと、 SELECT NAME FROM testtbl WHERE CODE = '0001'の様な形で NAMEの部分の結果として,'AAAA,BBBB'の文字列を取得したいです。 ファンクションとかで実現できるでしょうか?

  • 複数のテーブルを使ってselectしたい

    以下のようなことをしようと思っていますが、いろいろやってみてもできなかったのでお尋ねします。 ログインのログを集計しています。 テーブルの構成は大まかには ID logintime aaa 2004-11-10 10:10:10 bbb 2004-11-10 10:10:11 ccc 2004-11-10 10:10:12 aaa 2004-11-10 10:10:13 aaa 2004-11-10 10:10:14 という構成です。 これが1日ごとに、 log_20041108 log_20041109 log_20041110 log_20041111 という感じで並んでいます。 それで、やりたいことは「ユニークログイン数のカウント」です。 1日であれば > select count(distinct id) from log_20041111; などでできると思うのですが、 (上記の例で行くとこれは3になりますね。) これをイメージ的には > select count(distinct id) from log_20041111,log_20041110,log_20041109; のように、複数のテーブルでやりたいのです。 ID logintime aaa 2004-11-11 10:10:10 bbb 2004-11-11 10:10:11 ccc 2004-11-11 10:10:12 aaa 2004-11-11 10:10:13 aaa 2004-11-11 10:10:14 ID logintime aaa 2004-11-10 10:10:10 bbb 2004-11-10 10:10:11 ddd 2004-11-10 10:10:12 aaa 2004-11-10 10:10:13 ID logintime aaa 2004-11-09 10:10:10 bbb 2004-11-09 10:10:11 eee 2004-11-09 10:10:12 これに対して、「5」という結果が取り出したいのです。 (aaa, bbb, ccc, ddd, eeeの5人) 何かいい方法がないでしょうか?? 宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • SQLのこと:distinctして並び替えたい

    select * from (select distinct on (aaa) * from bbb) as ccc order by ddd テーブルbbbのaaaというフィールドが重複せず、しかも他のフィールドで並び替えをしたかったら、このような書き方以外ありますか?データベースはPostgreSQLです。 この書き方で不都合が出ているというわけではありませんが、どう書けば、パフォーマンス的にも良いSQLになるか、詳しい方がいらっしゃいましたら、お願いします。

  • プレインPHPでのSQL検索結果取得

    初心者の質問ですみません。 フレームワークをずうっと使って来たのですが、フレームワークを使わずに検索をしようとしたところ、全く思うようにいかず困っています。 SELECT * FROM table のような単純なSQL文なのですが、PEARを使って $sql = "SELECT * FROM table"; $result = $conn->query($sql); としvar_dumpしてみると、期待していたSQLのデータが表示されません。 フレームワークを使っていると、この時点でどのフレームワークでもきれいに連想配列で表示できていました。 その辺が、フレームワークのフレームワークたるゆえんなのでしょうか..... ただ、結果は取得できているようで、 $count = $result->numRows(); としてやると正しい件数が表示されますし、カラム名を指定して while($rs = $result->fetchRow(DB_FETCHMODE_ASSOC)){ echo $rs['column_name']; } としてやるとカラムの値を表示します。 やりたいこととしては、検索結果を連想配列で取得し、foreachで行ごとに処理を行うことで、whileで$rs['column_name']を取得できることから、最悪でも力技で行ごとにカラム情報を全て取得して配列を作ってやることはできるとは思うのですが、もっと良い方法が無いはずがないと思います。 教えていただけますでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP