需要将列值求和到相同的 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的主要内容,如果未能解决你的问题,请参考以下文章