ソース データからいくつかのレコードを一覧表示するクエリを作成しました (この下部にあります)。
私のテーブルのセットアップは、次のような3つのテーブルで構成されています
tu_unit_tbl
| unit_id | unit_name | unit_subject |
sp_student_tbl
| st_id | st_fname | st_lname |
sp_test_tbl
| ts_id | ts_st_id | ts_unit_id | ts_session |
これまでのところ私のクエリは正常に動作しますが、計算フィールドを追加する必要があります。
SELECT U.unit_subject,
U.unit_name,
S.st_fname + ' ' + S.st_lname as sname,
T.ts_st_id,
T.ts_session
FROM sp_test_tbl T
JOIN sp_student_tbl S on T.ts_st_id = st_id
JOIN tu_unit_tbl U on unit_id = ts_unit_id
WHERE ts_st_id = 184318
GROUP BY unit_name, U.unit_subject, ts_session, st_lname, st_fname, ts_st_id
それはこれを生成します:
気がつけば3列。最初の 2 つは同じ「ユニット名」を持っています。これらの行の出現をカウントするフィールドを追加しようとしています
unit_subject | unit_name | sname | ts_st_id | ts_session
--------------------------------------
Mathematics | Algebra, Patterns, and Relationships | Frog Man | 184318 | 2012-07-31 15:22:42.000
Mathematics | Algebra, Patterns, and Relationships | Frog Man | 184318 | 2012-07-31 15:25:47.000
Mathematics | Data, Statistics, and Probability | Frog Man | 184318 | 2012-07-31 15:25:59.000
私が得ようとしているもの
unit_subject | unit_name | sname | **COUNT OF UNIT_NAME**
---------------------------------------------------------------------------------------
Mathematics | Algebra, Patterns, and Relationships | Frog Man | **2**
Mathematics | Data, Statistics, and Probability | Frog Man | **1**
最初の 2 つが結合されてカウントされたため、現在は 2 つのレコードしかないことに注意してください。
もちろん、これは集計結果であり、これらの集計項目を新しいフィールド (Count of Unit Name と呼ばれる) でカウントしたいと考えています。
Count(*) フィールドに入力しようとしたりJOIN
、フィールドをカウントしようとするサブクエリを実行したりしても、集計のカウントは得られませんが、集計した各項目がカウントされます!
結果に含まれる繰り返し単位名をカウントするにはどうすればよいですか?
生データは次のとおりです: (繰り返しデータは学生のテストセッションを示します。各レコードはセッションの一部です)
select ts_st_id,
ts_session
from sp_test_tbl
where ts_st_id = 184318
ts_st_id | ts_session
184318 2012-07-31 15:22:42.000
184318 2012-07-31 15:22:42.000
184318 2012-07-31 15:22:42.000
184318 2012-07-31 15:22:42.000
184318 2012-07-31 15:22:42.000
184318 2012-07-31 15:22:42.000
184318 2012-07-31 15:22:42.000
184318 2012-07-31 15:22:42.000
184318 2012-07-31 15:22:42.000
184318 2012-07-31 15:22:42.000
184318 2012-07-31 15:22:42.000
184318 2012-07-31 15:22:42.000
184318 2012-07-31 15:22:42.000
184318 2012-07-31 15:25:47.000
184318 2012-07-31 15:25:47.000
184318 2012-07-31 15:25:47.000
184318 2012-07-31 15:25:59.000
184318 2012-07-31 15:25:59.000
184318 2012-07-31 15:25:59.000
184318 2012-07-31 15:25:59.000
184318 2012-07-31 15:25:59.000
184318 2012-07-31 15:25:59.000
184318 2012-07-31 15:25:59.000
184318 2012-07-31 15:25:59.000
184318 2012-07-31 15:25:59.000
184318 2012-07-31 15:25:59.000
184318 2012-07-31 15:25:59.000
184318 2012-07-31 15:25:59.000
184318 2012-07-31 15:25:59.000
184318 2012-07-31 15:25:59.000
184318 2012-07-31 15:25:59.000
184318 2012-07-31 15:25:59.000
184318 2012-07-31 15:25:59.000
184318 2012-07-31 15:25:59.000
184318 2012-07-31 15:25:59.000
184318 2012-07-31 15:25:59.000
184318 2012-07-31 15:25:59.000
私の最新の試み(praveenが推奨)はうまくいくようですが、エラーが発生します。
WITH CTE (unit_subject,
unitName,
sname,
ts_st_id,
ts_session)
AS
(
SELECT U.unit_subject,
U.unit_name as unitName,
S.st_fname + ' ' + S.st_lname as sname,
T.ts_st_id,
T.ts_session
FROM sp_test_tbl T
JOIN sp_student_tbl S on T.ts_st_id = st_id
JOIN tu_unit_tbl U on unit_id = ts_unit_id
WHERE ts_st_id = 1234
GROUP BY unit_name, U.unit_subject, ts_session, st_lname, st_fname, ts_st_id
)
select count(unitName) over (partition by unit_name)
Go
次のエラー メッセージが生成されます。
Msg 207, Level 16, State 1, Line 22
Invalid column name 'unit_name'.
Msg 207, Level 16, State 1, Line 22
Invalid column name 'unitName'.