
いつもお世話になっています。
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も見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLのエラー(~付近に不適切な...
-
<SQL>重複しているデータの場合...
-
DBのテーブルの設計ができず困...
-
SQLについて
-
[SQLServer] テーブル名からカ...
-
SQL Date型の列から年月だけを...
-
sqlserverで集計結果をUPDATEし...
-
Accessの重複なしのカウントの...
-
【VB.NET】日付型の列にNULLを...
-
SQLサーバで和暦から西暦に変換...
-
ACCESS2007 フォーム 「バリア...
-
BULK INSERT時のNull許容について
-
SQLserver セル内での改行って...
-
SQLについて質問です。 下記の...
-
Microsoft SQL Serverについて
-
SQLをはじめから勉強するには
-
Visuaal Studio Community 2022...
-
AccessのInsertクエリのあとつ...
-
ACCESSで複数テーブルを結合し...
-
大学でSQLの授業があるのですが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PostgresSQLでの動的な計算
-
PostgresのSQL文
-
group byで指定したカラム以外...
-
複数の条件での絞り込み検索の仕方
-
PostgresSQLで自動計算
-
UPDATE文で・・・・
-
ストアドプロシージャによる動...
-
日時の期間での抽出
-
SQLの条件抽出について
-
POSTGRESQLでt時間差が30分以上...
-
○日以内のレコード取得について
-
日ごとの集計
-
日付毎の集計方法
-
1週間後の日付を求めたい
-
postgreSQLのselect文でデータ...
-
検索条件の指定方法がわかりま...
-
SQLでのデータ検索方法
-
時間内かどうかの抽出
-
売り上げ集計SQLが作れません
-
【SQL】他テーブルに含まれる値...
おすすめ情報