最初に: ここでは完全な SQL 初心者です。残念ながら、私は締め切りにこの衝動に駆られました。:/ これがばかげた質問である場合は、申し訳ありません。
だから私は、さまざまな列を持つビューを持つ DB を持っています。私が興味を持っている 2 つの列があります: UserIDとAgeです。
- Ageには、レポートの作成日からの経過日数が保存されます。
- UserIDは、レポートを作成したユーザーです。
ビューには、ユーザーのすべてのレポートが一覧表示されます。
私がしなければならないことは、既存のビューから新しいテーブル/ビューを作成して、各ユニーク ユーザーをリストし、それらのドキュメント全体をさまざまな年齢グループに分類することです。したがって、列は次のようになります。
ユーザー || # rprts <14 日 || # rprts 14-17 日 || # rprts 18-28 日 || # rprts 29 ~ 44 日 || # rprts 45 日以上
必要なすべてのユーザーのセットを取得できることはわかっています。
SELECT DISTINCT [UserID] FROM [DB].[dbo].[DB_View]
そして、次のコマンドを実行して、UserID をハードコーディングすることで、新しいテーブル/ビューに必要な 1 行を取得できます #:
SELECT DISTINCT
[UserID],
(SELECT COUNT(*) FROM [DB].[dbo].[DB_View] WHERE (Age < 14) AND UserID = '9999') AS "Less Than 14 Days",
(SELECT COUNT(*) FROM [DB].[dbo].[DB_View] WHERE (Age BETWEEN 14 AND 17) AND UserID = '9999') AS "14 to 17 Days",
(SELECT COUNT(*) FROM [DB].[dbo].[DB_View] WHERE (Age BETWEEN 18 AND 28) AND UserID = '9999') AS "18 to 28 Days",
(SELECT COUNT(*) FROM [DB].[dbo].[DB_View] WHERE (Age BETWEEN 29 AND 44) AND UserID = '9999') AS "29 to 44 Days",
(SELECT COUNT(*) FROM [DB].[dbo].[DB_View] WHERE (Age >= 45) AND UserID = '9999') AS "Over 45 Days"
FROM [DB].[dbo].[DB_View]
WHERE UserID = '9999'
ユーザーの結果セットは約 600 行で、ビューには通常約 6,000 ~ 15,000 行あります。私が最初に考えたのは、ユーザーの結果セットを取得し、各ユーザーをパラメーターに格納し、それをユーザー ID をハードコーディングしたクエリに渡すことでした。悲しいことに、それを行うための SQL を理解することさえできません。(そして、SQL を知っていれば、これを行うためのはるかに効率的な方法があると思います....) カーソルの使用に関するものを見てきましたが、あまりよく理解していません。
何か案は?