我有一张像这样重复的表:
ClassId Name Days SpecHours
1 Jack 250 130
1 Jack 250 130
1 Jack 250 120
2 Mike 300 130
…
我想要的是将非重复项的totalSpecHours相加。我的预期输出是:
ClassId Name Days totalSpecHours
1 Jack 250 250
2 Mike 300 130
我无法计算totalSpecHours。我正在尝试使用类似下面的内容,但是无法正常工作。
totalSpecHours = sum(distinct SpecHours)
我尝试下面的相等,但它也不起作用,但我想我需要这样的东西。如果有人帮忙我很感激。感谢。
totalSpecHours= (sum(X.SpecHours in (select mt.ClassId, mt.SpecHours from myTable mt group by mt.ClassId, mt.SpecHours) as X))
干杯。
编辑:Ty为答案,最正确。第一个答案被选为正确答案。赞赏所有!
答案 0 :(得分:3)
尝试此查询:
select
classID,
Name,
Days,
sum(specHours) as TotalSpecHours
from
(
select distinct ClassId, Name, Days, SpecHours from myTable )t
group by classID, Name, Days
<强>逻辑:强>
我们在内部查询中采用不同的值,然后在这个结果集上我们进行分组并得到总和。 请注意,内部查询仅评估一次,因此没有性能问题。
答案 1 :(得分:2)
不应该这样的工作吗?
SELECT ClassId, Name, Days, SUM(SpecHours) AS totalSpecHours
FROM (
SELECT DISTINCT ClassId, Name, Days, SpecHours
FROM Table
) outer
GROUP BY ClassId, Name, Days
答案 2 :(得分:0)
使用分组依据:
SELECT ClassId, Name, Days, SUM(totalSpecHours) FROM
(
SELECT ClassId, Name, Days, SpecHours AS totalSpecHours
FROM TableName GROUP BY ClassId, Name, Days, SpecHours
)
答案 3 :(得分:0)
您可以使用CTE(公用表格表达式)
while (doswap= true)
答案 4 :(得分:0)
with cte
as
(
select
classid,name,days,spechours,row_number() over (partition by classid,name,days,spechours order by spechours) as rn
from yourtable
)
select sum(spechours)
from cte c1
where not exists(select 1 from cte c2 where c1.classid=c2.classid and c1.rn>1)