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

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

新規登録して質問してみよう
ただいま回答率
85.37%
SQL Server

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

SQL

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

Q&A

解決済

1回答

707閲覧

SQLのクエリについて: CASE WHENで、THENにカラムの結果を表示させる方法

T_TTTTT

総合スコア5

SQL Server

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

SQL

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

0グッド

1クリップ

投稿2020/04/21 07:52

イメージ説明

SQL(SQLServer)についての質問です。
上記のような表示値を返すようなクエリが書きたいと思っております。

以下の2つテーブルを結合しています。(T_フラグ T_実績 の2つ)
イメージ説明

その際にフラグに応じて表示値を返したいです。
1:北海道
2:東京
3:大阪
4:沖縄

表示値を返すには、イメージ的には
SELECT
T_フラグ.月日
,CASE WHEN T_フラグ.フラグ = 1 THEN T_実績.北海道 ELSE T_フラグ.フラグ = 2 THEN T_実績.東京 ELSE T_フラグ.フラグ = 3 THEN T_実績.大阪 ELSE T_実績.沖縄
,T_フラグ.フラグ
,以下略

のイメージを持つのですがうまくいきません。THENの後は数値や文言でなければいけないのでしょうか?
また上記表示値を返すための書き方があれば教えていただけると助かります。

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

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

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

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

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

gentaro

2020/04/21 08:12

「うまくいきません」ではなく、実行した完全なクエリと実際に出たエラーメッセージの全文を書いてください。
storm3

2020/04/21 17:04

> THENの後は数値や文言でなければいけないのでしょうか? 質問の意味が分かりません。 ただ、提示されたSQLの片鱗から推測できるのは。CASE句について理解できていないということだと思います。 まずこちらのサイトとご自身のCASE句を見比べてみてください。 https://sql-oracle.com/sqlserver/?p=1037 その上でうまくいかないことがあれば、何がうまくいかないのかを追記してください。 (SQLエラーがでたらそのエラーを。違う結果がとれたらその結果を。)
guest

回答1

0

ベストアンサー

「検索CASE式」ではこのようになります。

SQL

1SELECT 2 F.月日, 3 CASE 4 WHEN F.フラグ IS NULL THEN NULL 5 WHEN F.フラグ = '1' THEN J.北海道 6 WHEN F.フラグ = '2' THEN J.東京 7 WHEN F.フラグ = '3' THEN J.大阪 8 WHEN F.フラグ = '4' THEN J.沖縄 9 ELSE NULL 10 END as 表示値, 11 F.フラグ, 12 J.北海道, 13 J.東京, 14 J.大阪, 15 J.沖縄 16FROM 17 T_Flag as F 18INNER JOIN 19 T_Jisseki as J 20 ON F.月日 = J.月日

他の方が「質問への追記・修正依頼」に参考URLなどを示して下さってますので
参考にしてください。 (その例では、文字連結に || を使っているので SQLServerでは、 + に読み替えてください)

Microsoft Transact-SQLリファレンス
CASE (Transact-SQL)
例の所にいくつか記載がされています。
https://docs.microsoft.com/ja-jp/sql/t-sql/language-elements/case-transact-sql?view=sql-server-ver15

投稿2020/04/30 00:26

t-takayama

総合スコア167

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問