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

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

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

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

SQL

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

Q&A

解決済

3回答

13298閲覧

SELECT文で データの存在チェック、データを得られない場合に 文字を返したい

saya24

総合スコア247

SQL Server

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

SQL

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

0グッド

0クリップ

投稿2020/07/07 08:17

編集2020/07/09 01:38

WHERE句の条件で合致するレコードをえられないときに、なんらかの文字を返す SELECT文を作りたいです。

DBMSは MSのSQLServerです。

以下左側、FROM句が 本来おかれる部分に 何を配置すれば良いのか分かりません。
配置せずに SELECT 'NO DATA' と書いてしまうとエラーになります。

WHERE NOT EXIST(SELECT * FROM T_TODAYDATA WHERE CONVERT(DATE, データ作成日時)=CONVERT(DATE, DATEADD(DAY, -1, GETDATE()))

Oracleだったら FROM DUAL で SELECT句に 好きな文字や 日付を 列挙することができることを認識しているのですが

よろしくお願いします。

20200709 1018AM追記

SQL

1SELECT CASE WHEN 2NOT EXIST ( 3SELECT * FROM T_TODAYDATA WHERE CONVERT(DATE, データ作成日時)=CONVERT(DATE, DATEADD(DAY, -1, GETDATE())) 4) 5THEN 'NO DATA' ELSE 'ARI DATA' END 6================================================== 7メッセージ 156、レベル 15、状態 1、行 3 8キーワード 'SELECT' 付近に不適切な構文があります。 9メッセージ 102、レベル 15、状態 1、行 4 10')' 付近に不適切な構文があります。

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

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

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

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

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

guest

回答3

0

全く同じ動作にするなら、疑似的な表をインラインビューで指定すればOK

SQL

1SELECT 'NO DATA' 2FROM (select NUll as dummy) DUAL 3WHERE NOT EXISTS()

若しくはValuesで

SELECT 'NO DATA' FROM (values(Null)) as DUAL(dummy) WHERE NOT EXISTS(~)

いっそのこと、DUAL表を作る

SQL

1select NUll as dummy into dual

投稿2020/07/08 09:23

編集2020/07/09 02:15
sazi

総合スコア25327

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

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

sousuke

2020/07/08 10:18

インラインビューって列名なしだと叱られなかったっけ?select null as Dummyとかしないとダメだったような
sazi

2020/07/09 01:21 編集

postgresで試してみてたんですけど、sqlerverで試してみたら、指摘の通りエラーでした。 修正しました。ありがとうございます。
guest

0

ベストアンサー

fromなしでcase直書きでいいと思います。

sql

1select case when 2 NOT EXIST( 3 SELECT 0 4 FROM T_TODAYDATA 5 WHERE CONVERT(DATE, データ作成日時)=CONVERT(DATE, DATEADD(DAY, -1, GETDATE())) 6 then 'NO DATA' 7 else 'DATA ARI' end

というかSELECT 'NO DATA' で通るはずですが…
全角スペースのせいでは?

投稿2020/07/07 10:02

sousuke

総合スコア3830

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

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

sazi

2020/07/08 07:41

from句無しでwhere記述した事によるエラーだと思います。
sousuke

2020/07/08 09:08

あー「select '' where 〜」って書いたってことか
saya24

2020/07/09 01:18

みなさん ありがとうございます。 CASE文 いいアイデアだと思ったのですが やはり エラーをまねきました。 本文に 現況のスクリプトを貼り付けます、ご確認いただければ幸いです。
saya24

2020/07/09 02:34

すみません、スペルミスでした。 ありがとうございます、一件落着。From句なしの場合は CASE文使えばよかったのですね
sousuke

2020/07/09 03:10

そうですね。ストアドとかでプログラム文が使えるときは if (not exists()) begin select 'NoData' end else begin select 'Data Exists' end とかやってもいいですね。
saya24

2020/07/09 03:26

了解致しました!
guest

0

汎用的なSQL文ではめんどくさそうなのでプロシージャでやるとかだめでしょうか?

投稿2020/07/07 08:39

yambejp

総合スコア116724

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問