我已经产生了查询,从我的源数据列出了一些记录(在此底部)试图计算合计结果在SQL Server 2008 R2
我的表的设置是由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行。前两个具有相同的“单位名称”。我期待添加一个字段来计算这些行
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人合并和计数..
这是一个合计的结果,当然,我想要计算一个新字段中的这些聚合项(称为计数单位名称)
我试图在计数(*)字段中输入一个子查询,该子查询试图对字段进行计数不会给我一个聚合数,而是统计我聚合的每个项目!
如何计算我的结果中重复的单位名称?
这里的原始数据:(重复数据表明一个学生一个测试会话中的每个记录是一个会话的一部分。)
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'.
您对COUNT(*)的查询是怎样的? – 2012-08-14 01:39:04
我不在我的办公桌前,但是如果我用count(*)包围查询,第一个查询的计数是13,3和21,第二个查询的计数是16和21。它明确*源*数据项正在计算,而不是*单位*在我的聚合结果 – KevinDeus 2012-08-14 01:45:12
将您的查询放入一个CTE,然后选择count(unitName)over(由unitName分区) – praveen 2012-08-14 01:52:55