- 締切済み
SQLで集計した値を使用して条件指定したいのですが
集計した値を条件として名称を取得したいのですが、 考えていたSQLだとエラーが出てしまいます。 SQLはOracleで動かしています。 未熟者でいい方法が思いつかないのですが、 名称を取得する方法を教えて頂けないでしょうか。 (例) 品目マスタ(mt_item) item_cd/item_name 1001/品目A 1002/品目B 1003/品目C select min(item_cd), (select item_name from mt_item where item_cd = min(item_cd)) as item_nm from mt_item group by item_nm 宜しくお願い致します。
- ryu_chi4
- お礼率0% (0/2)
- SE・インフラ・Webエンジニア
- 回答数2
- ありがとう数0
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- root139
- ベストアンサー率60% (488/809)
やりたいのは、「item_cd が最小の行の item_cd / item_name を取出す」ことで良いでしょうか? であれば、下記の様な方法が考えられます。 ■ サブクエリで最小値を取得し、それを条件に使う方法 SELECT * FROM mt_item WHERE item_cd = (SELECT MIN(item_cd) FROM mt_item) ■ 相関サブクエリを使う方法 SELECT * FROM mt_item a WHERE NOT EXISTS (SELECT * FROM mt_item b WHERE a.item_cd > b.item_cd)
- めとろいと(@naktak)
- ベストアンサー率36% (785/2139)
SELECT ITEM_CD, MAX(ITEM_NM) ITEM_NM FROM MT_ITEM GROUP BY ITEM_CD
関連するQ&A
- acsessのSQLでフィールド名と説明(コメント)を取得する方法
AcsessのSQLでフィールド名と説明(コメント)を取得する方法はありますでしょうか? オラクルでしたら SELECT [COLUMN_NAME], [RTRIM(COMMENTS)] FROM テーブル名 で取得できる様ですが、Acsessはだめでした。 よろしくお願いいたします。
- 締切済み
- その他(データベース)
- sqlのwhereで指定した条件の前後を取得したい
テーブル=T) KEY DATA 001 あ 002 い 003 う 004 え 005 お SQL) SELECT DATA FROM T WHERE KEY = 003 ; 上記のSQLでは、「う」のデータしか取得できませんが、 「003」の前後1件、合計3件の「い」「う」「え」を取得する方法を教えて下さい。 ちなみに、 SELECT DATA FROM T WHERE KEY >= 003 AND ROWNUM <= 2 と SELECT * FROM ( SELECT DATA FROM T WHERE KEY < 003 ORDER BY KEY DESC ) WHERE ROWNUM < 1 のUNIONでは上手く行きませんでした。 よろしくお願いします。
- ベストアンサー
- Oracle
- WITH句を使用したSQLの結果
WITH句を使用して総件数と1~20件までのデータを同時に取得するSQLを組んでみたところ、 WITH TMP AS (SELECT ROW_NUMBER() OVER (ORDER BY NO) AS CHECKROWNUM,NAME FROM TEST_TBL ORDER BY NO) SELECT T1.ALLCNT, T2.* FROM (SELECT COUNT(*) ALLCNT FROM TMP) T1, TMP T2 WHERE T2.CHECKROWNUM BETWEEN 1 AND 20; Oracle10.2.0.3.0のバージョンで ALLCNTが21になってしまう現象が発生してしまいました。 Oracle10.2.0.4.0や9iでは発生せず正しい総件数が取得できるのですが、 バージョンによる不具合は考えられますでしょうか。 それともSQL自体なにか悪い部分があるのでしょうか。 ちなみに T2.CHECKROWNUM BETWEEN 1 AND 100; と帰るとALLCNTが101と帰ってきます。 また、WITH句を使わず下記のようにTMPの部分をWITH句で使用したSQLに 置き換えると正しくALLCNTが取れます。 SELECT T1.ALLCNT, T2.* FROM (SELECT COUNT(*) ALLCNT FROM (SELECT ROW_NUMBER() OVER (ORDER BY NO) AS CHECKROWNUM,NAME FROM TEST_TBL ORDER BY NO)) T1, (SELECT ROW_NUMBER() OVER (ORDER BY NO) AS CHECKROWNUM,NAME FROM TEST_TBL ORDER BY NO) T2 WHERE T2.CHECKROWNUM BETWEEN 1 AND 20;
- 締切済み
- Oracle
- SQL-Server 6.5で最初の数行を抽出するには?
SQL-Server 6.5で最初の数行を抽出するにはどのようにすればよろしいでしょうか? Oracleの場合、 SELECT * FROM TABLE_NAME WHERE ROWNUM <= 10; JETの場合、 SELECT TOP 10 * FROM TABLE_NAME; ですが、これをSQL-Serverで行う場合をご教授下さい。
- 締切済み
- その他(データベース)
- SQL文について困っています
ID(NUMBER型)と NUM(NUMBER型)と nenngetu (date型)を持ったテーブルAAAから、 ID=1000 のなかで日時が一番古い処理NOをselectするSQL文を書きましたが上手く実行されません。 select NUM from AAA where nenngetu = (select min(nenngetu) from AAA) and ID=1000; ID=1000の条件をはぶき、 select NUM from AAA where nenngetu = (select min(nenngetu) from AAA); でしたら、実行できました。 oracleで実行しようとしています。 どなたか、書き方を教えてください。
- ベストアンサー
- その他(プログラミング・開発)
- COBOLの動的SQLについて
COBOLにおいて、動的にSQLを組みたいのですが、 取得する方法も含めてご教授願いませんでしょうか? 例) 条件により コード=1の場合、 SELECT A.ID,B.NAME FROM ID A,NAME B コード=2の場合、 SELECT A.ID,B.NAME,C.ADDRESS FROM ID A,NAME B,ADDRESS C のように条件により取得する項目も数もテーブルも違います。 この場合でのSQLの組み方とデータを取得する(FETCHの方法)がわかりません。 また、取得する件数も1件ではありません。 よろしくお願い致します。
- 締切済み
- その他(プログラミング・開発)
- PL/SQLでのSQL文法
こんにちは。教えてください。 PL/SQLを使うのが初めで戸惑っています。 まず、PROCEDUREで =========================== BEGIN SELECT NAME FROM TABLE1 WHERE NAME='tanaka'; END; / =========================== このように書いて実行させようとすると、「コンパイルエラー」 「INTO句はこのSELECT文に入ります」というエラーが出ます。 SQLの文法的には間違ってないと思うのですが、INTO句とはこれいかに?? ネットでPL/SQLで検索かけて調べたのですがあまりにも初歩すぎて わかりませんでした。 PL/SQLやORACLEのメーリングリストでお勧めがありましたら教えてください。 よろしくお願いいたします。
- ベストアンサー
- その他(データベース)
- 複数テーブルの集計その2
お世話になります。 先日テーブルの集計について教えていただき、下記集計結果を取得することができたのですが、 新たに自由形50~平泳ぎ50までの合計を追加したいのです。(一人で4種目参加する場合は4と数える) テーブル1 AreaID AreaName --------------------- 1 北海道 2 東北 テーブル3 ID AreaID Name Item1 Item2 Item3 Item4 --------------------------------------------------------- 1 2 鈴木 2 1 4 3 2 1 田中 1 2 null null 3 2 伊藤 3 null 2 4 「集計結果」 参加人数 自由形50 自由形100 背泳ぎ50 平泳ぎ50 追加部分 --------------------------------------------------------------- 北海道 1 1 1 0 0 2 東北 2 1 2 2 2 7 $sql="select AreaName, count(distinct ID) 参加人数, count(case when Item=1 then 1 else null end) as 自由形50, ・・・略 from t1 as x left join (select ID,AreaID,1 as Item from t3 where Item1=1 or Item2=1 or Item3=1 or Item4=1 union all select ID,AreaID,2 as Item from t3 where Item1=2 or Item2=2 or Item3=2 or Item4=2 ) as y on x.AreaID=y.AreaID group by AreaName order by x.AreaID というようにおしえていただきました。 null以外を取得するSQLをカウントとselectに追加すればいいのかと思い試したのですが期待した値を取得できません。 count(case when Item=AAA then 1 else null end) as abc,と union all select ID,AreaID,AAA as Item from テーブル3 where ItemID1<>'' or ItemID2<>'' or ItemID3<>'' or ItemID4<>'' or (ItemID1<>'' and ItemID2<>'') ・・・ バージョンはMySQL4.1.18です。 よろしくお願い致します。
- ベストアンサー
- MySQL
- 集計のSQLについて
皆さんの知恵をお借りしたいと思っています。 どなたか、良い案がある方お願いいたします。 以下のテーブルがあります。 (売上テーブル) 品名 金額 購入者 ---------------------------- 鉛筆 20 Aさん 鉛筆 40 Bさん 鉛筆 30 Bさん 鉛筆 30 鉛筆 10 上のテーブルで、品名・購入者を集計キーとして、 金額を集計したい場合、 SELECT 品名,購入者,SUM(金額) FROM 売上テーブル GROUP BY 品名,購入者 というSQL文で, 品名 金額 購入者 ---------------------------- 鉛筆 20 Aさん 鉛筆 70 Bさん 鉛筆 40 という結果が得られると思いますが・・・、 これを、 品名 金額 購入者 ---------------------------- 鉛筆 20 Aさん 鉛筆 70 Bさん 鉛筆 30 鉛筆 10 という結果になるようなSQL文を作りたいのです。 購入者が入っているものについては、品名・購入者で集計して、 購入者が空欄のものは集計しないようにしたいと思っています。 UNIONを使えばできるとは思うのですが、 それ以外の方法で、1回のSQL文でできる方法があれば知りたいと思っています。 よろしくお願いします。
- ベストアンサー
- Oracle
- 集計のSQLをお教え下さい
初心者ですよろしくお願いします。 以下の様なテーブルがあり、年月と場所コードで 件数を出したいと考えております。 申し訳ありませんが、SQLの記述をお教え下さい。 年月日 | 場所コード | 20060510 1000 20060511 1000 20060511 2000 20060512 2000 20060601 1000 20060601 2000 ・ ・ ↓ 年月日 | 場所コード | count 200605 1000 2 200605 2000 2 200606 1000 1 200606 2000 1 年月日を年月にして集計したいと考えています。 select 年月日,場所コード,count(*) from table group by substring(年月日 from 1 for 6) ではうまくいきませんでした・・・ よろしくお願いします。
- ベストアンサー
- MySQL