Mar*_*Sz. 5 sql t-sql sql-server group-by sum
这就是我所拥有的:
SELECT
SUBJECT_ID, SUM(SOMETABLE.COLUMN) AS HOURS, POINTS, SEMESTER_ID
FROM
SOME_TABLES
WHERE
(GROUP = (SELECT TOP (1) GROUP
FROM SOMETABLE2
WHERE (STUDENT_ID = 123)))
GROUP BY
SUBJECT_ID, POINTS, SEMESTER_ID
HAVING
(SUBJECT_ID = 782)
Run Code Online (Sandbox Code Playgroud)
此查询返回:
我需要得到这个结果:
为了得到这个结果我正在使用这个查询:
SELECT
SUBJECT_ID, SUM(SOMETABLE.COLUMN) AS HOURS,
SUM(SOMETABLE3.COLUMN) AS POINTS, SEMESTER_ID
FROM
SOME_TABLES
WHERE
(GROUP = (SELECT TOP (1) GROUP
FROM SOMETABLE2
WHERE (STUDENT_ID = 123)))
GROUP BY
SUBJECT_ID, SEMESTER_ID
HAVING
(SUBJECT_ID = 12)
Run Code Online (Sandbox Code Playgroud)
但它返回时SUM没有包含GROUP BY声明 - 就像第二次截图一样,但有两次有16点,而每学期应该有两行8点.
如何获得SEMESTER_ID的正确点?在这篇文章中有评论样本数据的脚本.
您可以使用OVER子句,例如:
询问
select distinct
Id,
sum(Hours) over (partition by SimId) Hours,
sum(Points) over (partition by SimId) Points,
SimId
from #t
Run Code Online (Sandbox Code Playgroud)
样本数据
create table #t
(
Id INT,
Hours INT,
Points INT,
SimId INT
)
insert into #t values
(787,100,0,214858),
(787,0,8,214858),
(787,100,8,233562),
(787,0,0,233562)
Run Code Online (Sandbox Code Playgroud)
输出
Id Hours Points SimId
787 100 8 214858
787 100 8 233562
Run Code Online (Sandbox Code Playgroud)
更新
因为您没有提供示例数据,所以您可以执行CTE以下操作:
WITH cte AS
(
SELECT
SUBJECT_ID, SUM(SOMETABLE.COLUMN) AS HOURS,
SUM(SOMETABLE3.COLUMN) AS POINTS, SEMESTER_ID
FROM
SOME_TABLES
WHERE
(GROUP = (SELECT TOP (1) GROUP
FROM SOMETABLE2
WHERE (STUDENT_ID = 123)))
GROUP BY
SUBJECT_ID, SEMESTER_ID
HAVING
(SUBJECT_ID = 12)
)
SELECT DISTINCT SUBJECT_ID,
sum(Hours) over (partition by SEMESTER_ID) Hours,
sum(Points) over (partition by SEMESTER_ID) Points,
SEMESTER_ID
FROM cte
Run Code Online (Sandbox Code Playgroud)
更新2
#temp_table您可以在选择查询中创建并插入数据,然后将其用于CTE以下情况:
;WITH cte AS
(
SELECT *
FROM #temp_table
)
SELECT DISTINCT SUBJECT_ID,
sum(Hours) over (partition by SEMESTER_ID) Hours,
sum(Points) over (partition by SEMESTER_ID) Points,
SEMESTER_ID
FROM cte
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
132 次 |
| 最近记录: |