C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: 「GROUP BY の式ではありません」


(過去ログ 31 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■15112 / inTopicNo.1)  「GROUP BY の式ではありません」
  
□投稿者/ Rool (1回)-(2008/03/04(Tue) 18:58:39)

分類:[データベース全般] 

GROUP BY のSQL文を何度実行しても、「GROUP BY の式ではありません」と言うエラーが帰ってきます。
「GROUP BY の式ではありません」と言うエラーは主にどんな場合のエラーでしょうか?
ご存知の方宜しくお願いします。

引用返信 編集キー/
■15114 / inTopicNo.2)  Re[1]: 「GROUP BY の式ではありません」
□投稿者/ はつね (486回)-(2008/03/04(Tue) 19:19:23)
はつね さんの Web サイト
No15112 (Rool さん) に返信
> GROUP BY のSQL文を何度実行しても、「GROUP BY の式ではありません」と言うエラーが帰ってきます。
> 「GROUP BY の式ではありません」と言うエラーは主にどんな場合のエラーでしょうか?

エラーメッセージの通りです。
SELECT句とGROUP BY句の指定内容などを再チェックするといいでしょう。

多分、エラーとなったSQL文もしくはそのSQL文より不要なところをとって同じエラーとなる最小SQL文を投稿しないとRoolさんの問題解決に繋がるような回答は投稿されないと思います。

なお、データベース全般となっていて具体的なRDBMS名が書かれていませんが、RDBMSによりSQL文も若干異なりますから、問題を解決したいRDBMSも明記した方が良いと思います。

引用返信 編集キー/
■15115 / inTopicNo.3)  Re[2]: 「GROUP BY の式ではありません」
□投稿者/ Rool (2回)-(2008/03/04(Tue) 19:42:23)
No15114 (はつね さん) に返信
> 多分、エラーとなったSQL文もしくはそのSQL文より不要なところをとって同じエラーとなる最小SQL文を投稿しないとRoolさんの問題解決に繋がるような回答は投稿されないと思います。

はつね さん申し訳ございません。
SQL文は下記のとおりです。

SELECT T.事業所コード,
T.倉庫コード,
T.寄託者コード,
T.受注日,
T.受注伝票番号,
T.受注伝票行番号,
REPLACE(LPAD(NVL(TRIM(T.参照伝票番号),0),10,'0') || '-' || LPAD(NVL(TRIM(T.参照明細号),'0'),6,'0'),'0000000000-000000',' ') AS 参照伝票番号 ,
REPLACE(LPAD(NVL(TRIM(T.出荷伝票番号),'0'),10,'0') || '-' || LPAD(NVL(TRIM(T.出荷伝票明細番号),'0'),5,'0'),'0000000000-00000',' ') AS 出荷伝票番号 ,
CASE T.作業状況
WHEN '0' THEN '取込済'
WHEN '1' THEN '引当済'
WHEN '2' THEN '指示済'
WHEN '3' THEN '確定済'
WHEN '4' THEN '送信済'
END AS 作業状態 ,
T.出荷予定作成日 AS 予定作成日 ,
T.出荷予定日 ,
T.バッチ番号 ,
T.取込回数 ,
CASE T.作業状況
WHEN '0' THEN 00000000
WHEN '1' THEN 00000000
ELSE T.出庫指示日
END AS 出庫指示日 ,
NVL(T.納入先名称, ' ') AS 得意先名称 ,
NVL(T.商品コード1, ' ') AS 部番コード ,
NVL(T.商品名, ' ') AS 商品名 ,
T.出荷予定総バラ数 AS 予定数 ,
T.引当総バラ数 AS 引当数 ,
T.出庫総バラ数 AS 出庫数 ,
T.登録日時 AS 取込時間 ,
MAX(S.登録日時) AS 出庫時間 ,
MAX(W.修正日時) AS 指示時間
FROM T_出荷予定ファイル T ,   T_出庫指示ファイル S ,   W_出庫指示店別 W
WHERE T.事業所コード = '001 '
AND T.倉庫コード = 'S601 '
AND T.寄託者コード = '100 '
AND T.事業所コード = S.事業所コード(+)
AND T.倉庫コード = S.倉庫コード(+)
AND T.寄託者コード = S.寄託者コード(+)
AND T.受注日 = S.受注日(+)
AND T.受注伝票番号 = S.受注伝票番号(+)
AND T.受注伝票行番号 = S.受注伝票行番号(+)
AND S.事業所コード = W.事業所コード(+)
AND S.倉庫コード = W.倉庫コード(+)
AND S.寄託者コード = W.寄託者コード(+)
AND S.出庫指示番号 = W.出庫指示番号(+)
AND S.出庫指示枝番 = W.出庫指示枝番(+)
GROUP BY T.事業所コード ,
T.倉庫コード ,
T.寄託者コード ,
T.受注日 ,
T.受注伝票番号 ,
T.受注伝票行番号
ORDER BY NVL(T.参照伝票番号, 0),NVL(T.参照明細番号, 0)


> なお、データベース全般となっていて具体的なRDBMS名が書かれていませんが、RDBMSによりSQL文も若干異なりますから、問題を解決したいRDBMSも明記した方が良いと思います。

DBは、オラクル10gです。


宜しくお願いします。
引用返信 編集キー/
■15116 / inTopicNo.4)  Re[3]: 「GROUP BY の式ではありません」
□投稿者/ 魔界の仮面弁士 (670回)-(2008/03/04(Tue) 20:50:35)
No15115 (Rool さん) に返信
> SQL文は下記のとおりです。

SELECT された列を見ると、(MAX等の)グループ関数で処理されておらず、かつ、
GROUP BY に指定されていない列が、多数あるようです。
(たとえば、T.参照明細号 や T.出荷予定総バラ数 等々)


もし、MAX を得たいのが T_出庫指示ファイル.登録日時 と W_出庫指示店別.修正日時 だけで、
T_出荷予定ファイルに対してはグループ化したく無いのであれば、FROM 句には
T, S, W の 3 つをそのまま並べるのでは無く、
 FROM T_出荷予定 T, (SELECT … FROM … GROUP BY …) S, (SELECT … FROM … GROUP BY …) W
のように、T 以外の 2 つだけをグループ化してみては如何でしょう。


> DBは、オラクル10gです。

10g がそうであるかどうかは確認していませんが、Oracle の幾つかのバージョンでは、
列名に 長音記号 "ー" があると、SQL が正しく解釈されないので、
 SELECT T."事業所コード",
のように、列名を「"」で囲む必要があった…という状況を経験しています。
引用返信 編集キー/
■15117 / inTopicNo.5)  Re[3]: 「GROUP BY の式ではありません」
□投稿者/ はつね (487回)-(2008/03/04(Tue) 22:04:10)
No15115 (Rool さん) に返信
> はつね さん申し訳ございません。
> SQL文は下記のとおりです。

GROUP BY NVL(T.参照伝票番号, 0),NVL(T.参照明細番号, 0)
となっていますから、SELECT句にかけるのは、NVL(T.参照伝票番号, 0),NVL(T.参照明細番号, 0)以外はすべてグループ関数でなければなりません。
もしくは、グループ関数以外はすべてGROUP BY句に書かなければなりません。
SELECT句とGROUP BY句のどちらが正しいのでしょうか。


No15115 (魔界の仮面弁士 さん) に返信
Oracleの場合、日本語項目名などはダブルクォートで囲むのが正式なため、囲まなくてもOKなのはミドルウェアあたりが上手いことやっている場合だけですね。
大抵の場合うまくいきますが(たぶん、その手のエラーになっていないので、今回もうまくいっている)、ODAC 10.2.0.2とかだとダメですね。

引用返信 編集キー/
■15119 / inTopicNo.6)  Re[4]: 「GROUP BY の式ではありません」
□投稿者/ やじゅ (213回)-(2008/03/04(Tue) 22:17:41)
やじゅ さんの Web サイト
> ■No15115 (Rool さん) に返信

Oracleだったら、SQL PlusでSQLを流すと
エラー箇所の行番号は出てきます。
引用返信 編集キー/
■15120 / inTopicNo.7)  Re[5]: 「GROUP BY の式ではありません」
□投稿者/ はつね (488回)-(2008/03/04(Tue) 22:55:01)
No15119 (やじゅ さん) に返信
> Oracleだったら、SQL PlusでSQLを流すと
> エラー箇所の行番号は出てきます。

今回の場合、全面的に間違えているし
最初の「SELECT T.事業所コード」のところでエラーにもなるからあまり役に立たないかも。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -