需要将列值求和到相同的 rowno

Posted

技术标签:

【中文标题】需要将列值求和到相同的 rowno【英文标题】:Need to SUM the column values upto same rowno 【发布时间】:2017-01-11 06:14:59 【问题描述】:

我有一个场景,我将显示列值与特定行值的总和。我从小计中给出 A、B 和 C 类。如果小计hvs 80,我会给A,从81-90 B和91-100,设置为100

例如

Class   totalstudent     subtotal        category 
1        20                20             A
2        30                50             A
3        15                65             A
4        20                85             B
5        10                95             C
6         5                100            C

如何在上述场景中显示小计。需要在 SQL 中编写 fetch 查询。

【问题讨论】:

您使用的是哪个 DBMS?后格雷斯?甲骨文? 【参考方案1】:

你需要执行running total操作

选择 * 进入 #t 从(选择1个班级,20名学生 联合所有 选择 2,30 联合所有 选择 3,15 联合所有 选择 4,20 联合所有 选择 5,10 联合所有 选择 6,5 ) x

SELECT 班级、学生总数、小计、 CASE WHEN 小计 )X 按类别排序

【讨论】:

【参考方案2】:
USE CTE and get your desired result :


CREATE TABLE #Table(Class INT, totalstudent INT,category    
VARCHAR(10))

INSERT INTO #Table(Class , totalstudent ,category )
SELECT 1,20,'A' UNION ALL
SELECT 2,30,'A' UNION ALL
SELECT 3,15,'A' UNION ALL
SELECT 4,20,'B' UNION ALL
SELECT 5,10,'C' UNION ALL
SELECT 6,5,'C' 

;WITH CTE ( _Class , _totalstudent , _subtotal , _category) AS
(
   SELECT Class , totalstudent ,totalstudent ,category
   FROM #Table WHERE Class = 1
   UNION ALL
   SELECT Class , totalstudent , totalstudent + _subtotal  ,category
   FROM #Table
   JOIN CTE ON Class = _Class  + 1
)

SELECT * FROM CTE

【讨论】:

【参考方案3】:

检查一下。

        SELECT Class,totalstudent, 
        SUM(totalstudent)over(order by Class) as subtotal,
        Case When SUM(totalstudent)over(order by Class) <= 65 then 'A'  
        When SUM(totalstudent)over(order by Class) < 86 then 'B'  
        When SUM(totalstudent)over(order by Class) > 85 then 'C'  end As category  
        FROM #Table
        group by Class,totalstudent
        order by Class

【讨论】:

以上是关于需要将列值求和到相同的 rowno的主要内容,如果未能解决你的问题,请参考以下文章

使用 sqlbulktools 更新表时对列值求和

对应列值的最小值求和

基于多索引对列值求和

对mysql中的多列求和

Django ORM,通过查询求和列值

创建视图并对列值进行求和