いつもお世話になっています。
SQLServer・ストアドプロシージャの、WHERE句を動的にしたいのですがうまくできません。
やりたいことは、履歴テーブルの受付、回答が済んでいる件数を取得したいのです。
回答時間は0時から5時までを一まとめ、20時から23時を一まとめ、その他は一時間毎に抽出したいのです。
CASE文で書いたのですが、エラーが起こってしまいます。
どのように書いたらよいのかご教授下さい。
受付時間が8時代の件数を取得する時、
このように書きました。
DECLARE @from_date datetime
DECLARE @to_date_last datetime
DECLARE @answer_count int
SET @from_date = '2004/04/06'
SET @to_date_last = '2004/06/05'
SET @answer_time = 9
SELECT Count(R.受付時間)
FROM 履歴 AS R
WHERE LEFT(CONVERT ( varchar(20) ,R.受付時間, 8),2) = '08'
AND R.受付時間 between @from_date and @to_date_last
CASE
WHEN @answertime = 5 THEN
AND LEFT(CONVERT ( varchar(20) ,R.回答時間, 8),2) <= '0' + LEFT( Convert(varchar(20),@answer_time),1)
WHEN @answertime > 5 AND @answertime < 10 THEN
AND LEFT(CONVERT ( varchar(20) ,R.回答時間, 8),2) = '0' + LEFT( Convert(varchar(20),@answer_time),1)
WHEN @answertime > 10 AND @answertime < 20 THEN
AND LEFT(CONVERT ( varchar(20) ,R.回答時間, 8),2) = Convert(varchar(20),@answer_time)
WHEN @answertime = 20 THEN
AND LEFT(CONVERT ( varchar(20) ,R.回答時間, 8),2) >= Convert(varchar(20),@answer_time)
END
No.1ベストアンサー
- 回答日時:
DECLARE @from_date datetime
DECLARE @to_date_last datetime
DECLARE @answer_count int
SET @from_date = '2004/04/06'
SET @to_date_last = '2004/06/05'
SET @answer_time = 9
CASE
WHEN @answertime = 5 THEN
SELECT Count(R.受付時間)
FROM 履歴 AS R
WHERE LEFT(CONVERT ( varchar(20), R.受付時間, 8), 2) = '08'
AND R.受付時間 between @from_date and @to_date_last
AND LEFT(CONVERT ( varchar(20), R.回答時間, 8),2) <= '0' + LEFT( Convert(varchar(20), @answer_time), 1)
WHEN @answertime > 5 AND @answertime < 10 THEN
SELECT Count(R.受付時間)
FROM 履歴 AS R
WHERE LEFT(CONVERT ( varchar(20), R.受付時間, 8), 2) = '08'
AND R.受付時間 between @from_date and @to_date_last
AND LEFT(CONVERT ( varchar(20), R.回答時間, 8),2) = '0' + LEFT( Convert(varchar(20), @answer_time), 1)
WHEN @answertime > 10 AND @answertime < 20 THEN
SELECT Count(R.受付時間)
FROM 履歴 AS R
WHERE LEFT(CONVERT ( varchar(20), R.受付時間, 8), 2) = '08'
AND R.受付時間 between @from_date and @to_date_last
AND LEFT(CONVERT ( varchar(20), R.回答時間, 8),2) = Convert(varchar(20), @answer_time)
WHEN @answertime = 20 THEN
SELECT Count(R.受付時間)
FROM 履歴 AS R
WHERE LEFT(CONVERT ( varchar(20), R.受付時間, 8), 2) = '08'
AND R.受付時間 between @from_date and @to_date_last
AND LEFT(CONVERT ( varchar(20), R.回答時間, 8),2) >= Convert(varchar(20), @answer_time)
END
これじゃできませんか?
あと、全角スペースは
ここ用に入れたものですか?
この回答への補足
回答ありがとうございます。
うまく、やりたいことを書けなくてすみません。
確かに、一つずつ書いていけばよいのですが、
クロス集計のような表を作りたいのです。
表のイメージとして
|0~5時|6時|・・・|20時|21~23時 |
------------------------------------------
0~5時 | | | | | |
6時 | | | | | |
7時 | | | | | |
・ | | | | | |
・ | | | | | |
・ | | | | | |
18時 | | | | | |
19時 | | | | | |
20時 | | | | | |
21~23時 | | | | | |
としたいので、全てのSQLを書いてしまうと・・・
長すぎてしまいます。
そこで、短く、見やすいように書けないかと思い、
質問させて頂きました。
>あと、全角スペースは
ここ用に入れたものですか?
そのつもりで入れたわけではないのですが・・・。
初歩的なことですみませんが、全角と半角のスペースを混ぜてしまうのはいけないのでしょうか??
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- 大学受験 英作文の添削をお願いしたいです。 2 2022/08/19 20:37
- Visual Basic(VBA) エクセル VBA 難しいです 1 2023/02/21 15:39
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- C言語・C++・C# [至急]Project Euler:#17Number letter countsコード入力出力解説 2 2022/09/24 02:46
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- その他(プログラミング・Web制作) Rでのスクリプトのご相談 3 2022/12/08 16:22
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- PHP php テーブルが作成できない 1 2022/11/17 23:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
group byで指定したカラム以外...
-
【SQL】他テーブルに含まれる値...
-
SELECT INTOで一度に複数の変数...
-
CSVファイルを読み込んでテーブ...
-
既存データをINSERT文にして出...
-
テーブル名が可変の場合のクエ...
-
pandasでsqlite3にテーブル作成...
-
フラグをたてるってどういうこ...
-
認知心理学で言うスクリプトとは?
-
複数レコードの複数フィールド...
-
ACCESSにおいてスキーマとは
-
Accessで今日から5日後
-
sqlに記述できない文字
-
SQL Server:UNIONで結合した結...
-
SELECTした結果に行番号を求めたい
-
副問合せを使わずにUNIONと同様...
-
timestampのデータはどのように...
-
エラーを起こす方法
-
VBAでの行数を揃える方法
-
ACCESSのVBAにてExcelに行...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
group byで指定したカラム以外...
-
postgreSQLのselect文でデータ...
-
PostgresSQLで自動計算
-
PostgresSQLでの動的な計算
-
ストアドプロシージャによる動...
-
1週間後の日付を求めたい
-
POSTGRESQLでt時間差が30分以上...
-
複数の条件での絞り込み検索の仕方
-
件数をカウントして日付でソー...
-
フラグをたてるってどういうこ...
-
SELECT INTOで一度に複数の変数...
-
【SQL】他テーブルに含まれる値...
-
sqlに記述できない文字
-
UPDATEで既存のレコードに文字...
-
テーブル名が可変の場合のクエ...
-
エラーを起こす方法
-
オラクルのUPDATEで複数テーブル
-
truncate tableを使って複数の...
-
結合したテーブルをSUMしたい
-
Accessで今日から5日後
おすすめ情報