質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
A5:SQL Mk-2

A5:SQL Mk-2は、フリーのSQL開発ツールです。高機能で軽量、且つ分かりやすいことを目指して開発されました。SQLの実行やテーブル編集などの機能に加え、簡単な操作によりDB定義書やER図を自動生成することも可能です。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

解決済

2回答

5965閲覧

SQLServerでdecodeをしたい

AEGIL

総合スコア7

A5:SQL Mk-2

A5:SQL Mk-2は、フリーのSQL開発ツールです。高機能で軽量、且つ分かりやすいことを目指して開発されました。SQLの実行やテーブル編集などの機能に加え、簡単な操作によりDB定義書やER図を自動生成することも可能です。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

0クリップ

投稿2020/11/18 04:15

編集2020/11/18 08:49

以下の出力結果が欲しいのですが、’DECODE’は組み込み関数名として認識されませんと出てきます。回避するにはどうするのが望ましいのでしょうか?
T_CD SUM(NBIK)
41 120
45 80
47 960
41 80
43 980
49 79

SELECT T_CD,SUM(NBIK) FROM (SELECT E_D,T_CD,DECODE(T_KB,'0',(NBIK),(NBIK) * -1) AS NBIK FROM R_MYI WHERE E_D = '20150721' AND E_FLG = '9' AND E_FLG = '0' ) group by T_CD order by T_CD

caseで書き直したのですが、’)’付近に不適切な構文があると表示されてしまう。

SELECT T_CD,SUM(NBIK) FROM (SELECT E_D,T_CD, (CASE WHEN T_KB=0 THEN NBIK ELSE (NBIK) * -1 END )AS NBIK FROM R_MYI WHERE E_D = '20150721' AND E_FRG = '9' AND E_FLG = '0' ) group by T_CD order by T_CD

環境
A5:SQL Mk-2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

CASEを使用して下さい。

ついでに、NvlCOALESCE です。

SQLを手直しすると以下になります。

SQL

1select t_cd, sum(nbik * case when t_kb=0 then 1 else -1 end) 2from r_myi 3where e_d = '20150721' 4 and e_flg = '9' 5 and e_flg = '0' 6group by t_cd 7order by t_cd

e_flg = '9' and e_flg = '0'は矛盾していますので記述は見直して下さい。

投稿2020/11/18 04:28

編集2020/11/18 08:21
sazi

総合スコア25138

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AEGIL

2020/11/18 08:04

ありがとうございます。
AEGIL

2020/11/18 08:34

ご指摘回答ありがとうございます。矛盾理由お教えいただきたいです。
sazi

2020/11/18 08:39 編集

項目の値が'9'でかつ '0'という状態はあり得ません。 or条件の間違いだと思いますけど。
AEGIL

2020/11/18 08:48 編集

確かに間違えていました。
sazi

2020/11/18 08:44

or 条件なら and e_flg in ('0', '9') です。
AEGIL

2020/11/18 08:52

そもそもの名前を間違えていましたので一つのデータではなく二つのデータがありました。見落としておりました申し訳ありません。確かに先ほどのコードだとorになりますね。ご指摘ありがとうございます。
guest

0

ベストアンサー

DECODE関数SQLServerでは使えません。
CASE式で書き換えてください。

decode case 変換

投稿2020/11/18 04:32

編集2020/11/18 04:33
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AEGIL

2020/11/18 07:07

書き換えてみたのですが、’)’付近に不適切な構文があります。と言われてしまい上記の質問に追記した内容の不適切な部分 分かりますでしょうか?
退会済みユーザー

退会済みユーザー

2020/11/18 07:37 編集

CASE式の構文が間違ってます。 ENDがないですよ。 CASE式はSQL標準なので、よほどマニアックなデータベースソフト(エンジン)でない限り、どれでも使えるので、マスターしましょう。
AEGIL

2020/11/18 08:04

はい。学習してみます。
退会済みユーザー

退会済みユーザー

2020/11/18 08:11

END付けてもSQLエラー(’)’付近に不適切な構文)は出たままですか?
AEGIL

2020/11/18 08:32

END を編集した結果 キーワード 'GROUP' 付近に不適切な構文がありますになりました。
退会済みユーザー

退会済みユーザー

2020/11/18 08:56 編集

副問い合わせ/インラインビュー(SELECT ~ AND E_FLG = '0')に別名(エイリアス)を付けてください。 Oracleだと付けなくてもいいんですが、SQLServerはそうでないようです。
AEGIL

2020/11/18 09:14

長々とありがとうございます。お付き合いいただきありがとうございました。無事完了致しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問