• 締切済み

SQL文を教えてください

初心者です。 SQL文を教えてください。 バージョンはOracle 9.2です。 SELECT LTRIM(TO_CHAR(SEQ_PB_TYOHYO.NEXTVAL,'00000000')) AS NO_TYOHYO ,TO_CHAR(SYSDATE,'YYMMDD') AS DT_SYORI ,TO_CHAR(SYSDATE,'HH24MISS') AS TM_SYORI ,UM.CD_TOKCOD ,TM.RN_TOKUI ,SUM(DECODE(HM.CD_HSYUCD,'000001',UM.SU_URIAGE)) ,SUM(DECODE(HM.CD_HSYUCD,'000001',UM.KN_URIAGE)) ,SUM(DECODE(HM.CD_HSYUCD,'000002',UM.SU_URIAGE)) ,SUM(DECODE(HM.CD_HSYUCD,'000002',UM.KN_URIAGE)) ,/* 以下省略(000012まである) */ From URIMEI UM ,TOKMAS TM ,HINMAS HM Where (UM.KB_NYURYO = 1 Or UM.KB_NYURYO = 3) And UM.KB_DATA = 1 And (UM.KB_URINYU = 1 Or UM.KB_URINYU = 2 Or UM.KB_URINYU = 3) And UM.DT_URINYU >= CONCAT(W_Date1,'01') And UM.DT_URINYU <= TO_CHAR(Last_Day(W_Date2),'YYMMDD') And UM.CD_TOKCOD = TM.CD_TOKCOD(+) And HM.CD_HSYUCD = UM.CD_HSYUCD(+) GROUP BY HM.CD_HSYUCD; SQLスクラッチパットにて実行すると 「ここでは順序番号は使用できません」と言うエラーメッセージが出ます。 で、上から5行消して実行すると実行結果が返ってくるのです。 こういう場合はどうしたらよろしいでしょうか?

noname#63429
noname#63429

みんなの回答

  • jmh
  • ベストアンサー率23% (71/304)
回答No.2

select SEQ_PB_TYOHYO.NEXTVAL, X.* from  (select to_char(sysdate, 'YYMMDD') asa DT_SYORI , …   from URIMEI, TOKMAS, HINMAS …) X ネストすれば、できそうな気がします。

noname#63429
質問者

補足

rancerさんjmhさん回答ありがとうございます。 何とか出来ました。 ノーマルとグループとの絡みが良くなかったみたいです。 また、何か有りましたら宜しくお願い致します。 ↓これでいけました。 Select D_ID_CLIENT AS ID_KURAIA ,LTRIM(TO_CHAR(SEQ_PB_TYOHYO.NEXTVAL,'00000000')) AS NO_TYOHYO ,TO_CHAR(SYSDATE,'YYMMDD') AS DT_SYORI ,TO_CHAR(SYSDATE,'HH24MISS') AS TM_SYORI ,UM.CD_TOKCOD ,TM.RN_TOKUI ,Dummy.Dummy01 ,Dummy.Dummy02 From URIMEI UM ,TOKMAS TM ,HINMAS HM ,(SELECT SUM(DECODE(HM.CD_HSYUCD,'000001',UM.SU_URIAGE,0)) AS Dummy01 ,SUM(DECODE(HM.CD_HSYUCD,'000001',UM.KN_URIAGE,0)) AS Dummy02 Where ・・・・・ GROUP BY HM.CD_HSYUCD) Dummy Where ・・・・・ ;

  • rancer
  • ベストアンサー率66% (6/9)
回答No.1

SQL文のGROUP BY句に、HM.CD_HSYUCDしか記述がないんで、 それ以外のカラムの値は、集計関数を使わない限り、表示できないと思いますけど。。。 当然、順序をGROUP BY句に記述することもできないはずですけど ようするに、返ってくる結果の各行に順番に数字を振りたいってことですか? 私の知る限り、SQL文だけでそういうことはできなかったじゃないかなぁー

関連するQ&A

  • SQLのto_char関数の未定義エラー

    1、to_char関数は、insertのinto内でも使えますか? 2、oracle、access2010で insert table into (to_char(sysdate, 'yymmdd'), ......); と実行しましたが、「未定義の関数to_charがあります」と出てしまいます… 解決方法について、教えてください。 よろしくお願いします。

  • 一つのSQLにできませんか??

    表領域のサイズと使用量を抽出するSQLを作成しています。 上は自動拡張サイズと現サイズを抽出するSQL、下は現在の使用量を抽出するSQLです。この二つを一つのSQLで作成ってできないでしょうか?? (1)自動拡張と現サイズを算出 select sysdate syoribi, a.tablespace_name, to_char(sum(a.MAXBYTES)/1024/1024, '999,999,990') jidou, to_char(sum(a.BYTES)/1024/1024, '9,999,990.9') gensaize from dba_data_files a group by a.tablespace_name (2)使用量を算出 select sysdate syoribi, b.tablespace_name, to_char(sum(b.BYTES)/1024/1024, '9,999,990.9') siyoryo from dba_segments b group by b.tablespace_name どうかよろしくお願いします。

  • SQL 副問い合わせ

    以下のaテーブルのcardidと、bテーブルのnoが同じで、 かつ、bテーブルのryodtmが前月のデータを抽出する以下のsqlを、 aテーブルのcardidが、bテーブルのnoと同じで、かつ、ryodtmが前月分、 または、cテーブルのchangcardと同じで、かつ、ryodtmが前月分のを抽出する場合、 どうすればいいでしょうか? select * from a where cardid in ( select distinct(no) from b where kdncresbt ='1' and ryodtm >= TO_CHAR(ADD_MONTHS(TRNC(SYSDATE,'MONTH'), -1),'YYYYMM' ) || '01' and ryodtm < TO_CHAR(SYSDATE,'YYYYMM') || '01' )

  • Oracle SQL DELETE文のレスポンス

    いつもお世話になっております。 この度は、手前のSQL文において DELETE文のレスポンスが上がらずに難儀しています。 現在DELETE処理はバッチにて行っています。 最初にSELECTにて抽出を行ったものをバックアップにとり、 次は同様の条件でDELETE文で処理しています。 この際に、SELECTでは1秒程度で済んだ処理が、 DELETE文ではレスポンスが返ってこないという状況です。 何がまずいのか、どう工夫すればいいのか 色々変えてみましたがレスポンスは改善されません。 SQLと条件は以下です。 【SQL文】 SELECT 複数の項目 FROM TABLEA A WHERE NOT Exists(SELECT 'X' FROM TABLEB B WHERE A.ITEMNO = B.ITEMNO) AND NOT Exists(SELECT 'X' FROM TABLEC C WHERE A.ITEMNO = C.ITEMNO AND to_char(LAST_DAY(ADD_MONTHS(SYSDATE,-4)),'YYYYMMDD') < C.REPYMD) AND NOT Exists (SELECT 'X' FROM TABLEA2 A2 WHERE A.ITEMNO = A2.ITEMNO AND to_char(LAST_DAY(ADD_MONTHS(SYSDATE,-4)),'YYYYMMDD') < to_char(A2.CREATEDATE,'YYYYMMDD')) AND NOT Exists(SELECT 'X' FROM TABLEC C WHERE A.ITEMNO != C.ITEMNO AND to_char(LAST_DAY(ADD_MONTHS(SYSDATE,-4)),'YYYYMMDD') < to_char(A.CREATEDATE,'YYYYMMDD')) 上記のSELECT文の後に処理されるDELETE文は 「SELECT 複数の項目 FROM TABLEA A」 ⇒ DELETE FROM TABLEA A としたもので、 条件は全てSELECT文と同様のものを使用しています。 ◆条件を言葉で明記すると以下のようになります。 1.Bテーブルに存在するものは削除対象外とする 2.AテーブルのアイテムIDとCテーブルのアイテムIDは一致する。   AテーブルのCREATEDATEとCテーブルのREPYMDのいずれかが3ヶ月以内のアイテムは   削除対象外とする 3.AテーブルもしくはCテーブルにしか存在しない場合は、各日付が3ヶ月以内のアイテムは   削除対象外とする 以上のようになっています。 どなたかアドバイスをいただければ幸いです。 宜しくお願い致します。

  • PL/SQL文にて

    PL/SQL文にて、コーディングをしています。意図した通りにプログラムは動作するのですが、ファイルに何のデータも入ってこない場合の分岐処理を加えて、データが入ってこなかった場合にはファイルは作成しないというロジックを検討しています。どなたかうまいやり方をご存知無いでしょうか? --略-- --ファイル名設定 file_name := UPPER(rec_kaisya_1.kaisya_cd) || '_KATAMEI_ERROR_' || to_char(sysdate, 'YYMMDD') || '.csv'; --ファイルオープン(新規書き込みモード) File_Handle := UTL_FILE.FOPEN(file_dir, file_name, 'w'); --日付の書き込み UTL_FILE.PUTF(File_Handle, 'Created: %s\n', SYSDATE); --ファイルへの書き込み(改行のみ) UTL_FILE.NEW_LINE(FILE_HANDLE); --見出しの書き込み v_line_header := '会社コード, 会社名, 販製品名, 数量'; UTL_FILE.PUT_LINE(File_Handle, v_line_header); --会社毎のデータ取得 FOR rec_kaisya IN cur_kaisya(v_nenki,rec_kaisya_1.kaisya_cd ) LOOP --一行づつ書き込み UTL_FILE.PUTF(File_Handle,' ''%s, ''%s, ''%s, %s\n', rec_kaisya.kaisya_cd ,rec_kaisya.kaisya_jname   ,rec_kaisya.hanseihin_mei ,rec_kaisya.su); END LOOP; UTL_FILE.FCLOSE(File_Handle); END LOOP; --略--

  • SQLのBetween句

    SQL初心者です。 どなたかヒントでもよいのでご教授お願いします。 分からない箇所は以下の2つです。(SQLは下方に示しています) ・where句のbetweenの箇所にカラム指定箇所にTO_CHAR(SYSDATE -2, 'YYYYMMDD') を入れた時、何を評価しているのか? ・where句のbetweenの条件部分のカラム名に(+)をつけた場合何を意味しているのか? この2つがどうしても分かりません。 このSQLについて知識お持ちに方よろしくお願いします。 環境は次の通りです。 ------------------------ ■環境 ・OracleDatabase10.2 ■テーブル構成 テーブルは以下の2つです。 ・sample1 ・sample2 sample1テーブルに以下のカラムがあります。 ・test1 sample2テーブルに以下のカラムがあります。 ・test2 ------------------------ ■SQL SELECT * FROM sample1 s1, sample2 s2 WHERE TO_CHAR(SYSDATE -2, 'YYYYMMDD') BETWEEN s1.STAYMD(+) AND s2.(+)

  • OR と IN の違い

    いつもお世話になります。 SQLについて質問です。 以下の2つのSQLがあります。同じ結果が得られると思ったのですが、 結果がまたくことなりました。何故か理由を教えて下さい。 (1) SELECT count(*) FROM uriage WHERE subsystem_cd = 'ABC' AND store_name = 'MISAWA' AND opend_dt = 20061130 or opten_dt = 19000101 AND id <> 108 AND begin_dt <= 20061122 (2) SELECT count(*) FROM uriage WHERE subsystem_cd = 'ABC' AND store_name = 'MISAWA' AND opend_dt in (20061130,19000101) AND id <> 108 AND begin_dt <= 20061122 ※(1)のorのところを1つずつにして実行(SQL文を2つ作成)し、その結果を合計すると(2)の結果と同等になります。

  • SQL/Loaderでの年月日時分秒のセットに関して

    こんにちは、よろしくお願いします。 Oracle10gのテーブルの日付型の[SYSTRK_DT」フィールドに、 SQL/Loaderにて、ロードした当日の年月日時分秒をセットする文を 書いておりますが、以下の分で年月日はセットできたのですが、 時分秒までセットする方法をご存知の方いらっしゃいますでしょうか? このような感じにしたいです→[20060105111353] できれば24時間表記が良いのですが。。 よろしくお願いします。 LOAD DATA APPEND INTO TABLE TEST_MST ( ~~ SYSTRK_DT "TO_CHAR(SYSDATE,'yyyymmdd')" ~~ )

  • WHERE句でのデータ型について

    お願い致します。 ORACLEのWHERE句に対する疑問点ですが、 カレンダを管理するテーブル(カレンダマスタ)において、条件を指定してデータをSELECTする時にWHERE句に記入するデータ型についてご指導お願いします。 <詳細> 目的としてカレンダマスタよりSYSDATEの年月の休みの日を除く、稼動日数(COUNT)を求めるのが、目的です。 自分で作成した、SQLでは目的を果たしているのですが、WHERE句にTO_CHARを使用し、抽出項目(年月日-DATE型)を指定しているのですが、条件を指定する時は、TO_CHARで指定しても問題は無いのでしょうか? <SQL> SELECT COUNT(TO_NUMBER(休みFLG)) AS 稼動日 FROM カレンダマスタ WHERE 年月日 BETWEEN (TO_DATE(LAST_DAY(ADD_MONTHS(SYSDATE,-1))+1,'YYYY/MM/DD')) AND (TO_CHAR(LAST_DAY(SYSDATE),'YYYY/MM/DD')) AND 休みFLG='0' <補足> 休みFLG='0'は稼動日

  • PL/SQLでUPDATE別テーブル条件を付加する

    PL/SQLでUPDATEする際、別のテーブルからの条件も付加し更新を行いたいのですが、可能でしょうか? 教えて下さい。 どうぞよろしくお願い致します。 テーブル名T_NAMEのSEI='1'の時以下のロジック処理を行いたいのです。 UPDATE T_ADRS SET DLT_FLG = '1' , USER_ID = inUSER_ID , TNMT_ID = inCOMP_ID , UPD_DT = SYSDATE WHERE RTRIM(ADR_CD) = RTRIM(strADR_CD) AND RTRIM(DATA_SY) = RTRIM(strDATA_SY) AND RTRIM(IMP_NO ) = RTRIM(strIMP_NO );