求一个求和(sum)的SQL语句

awaterking 2004-12-08 05:14:53
表内容如下
stu_no stu_name score
100001 aaa 100
100002 bbb 96
100003 ccc 80
... ...
现在要求用一个select语句得出如下的结果集(条件stu_no<100003)
100001 aaa 100
100002 bbb 96
null 合计 196
怎么做?
就是要将求和产生的一条记录附在查询的结果集后面
不知说清楚没有
...全文
190 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞狼兄 2004-12-09
  • 打赏
  • 举报
回复
顶,这很常用的!
cheerpeng 2004-12-09
  • 打赏
  • 举报
回复
其实这个查询比较Easy,楼主看看帮助里面Rollup 和 Cube 的用法,绝对能够满足你那小小的要求,希望楼主好好学习,早日掌握技巧,绝对没问题。
lipkissnow 2004-12-09
  • 打赏
  • 举报
回复
看看下面這個吧...一定對你有幫助的.


使用 ROLLUP 來摘要資料
ROLLUP 運算子可用來產生包含小計與總數的報告。ROLLUP 運算子將產生一個類似於 CUBE 運算子產生之結果集的結果集。如需詳細資訊,請參閱使用 CUBE 來摘要資料。

CUBE 與 ROLLUP 的差異在於:

CUBE 將產生一個結果集,顯示出選定資料行之所有數值組合的彙總 (Aggregate)。


ROLLUP 將產生一個結果集,顯示出選定資料行之數值階層架構 (Hierarchy) 的彙總。
例如,一個簡單的 Inventory 資料表包含了:

Item Color Quantity
-------------------- -------------------- --------------------------
Table Blue 124
Table Red 223
Chair Blue 101
Chair Red 210

下列查詢將產生一個小計報告:

SELECT CASE WHEN (GROUPING(Item) = 1) THEN 'ALL'
ELSE ISNULL(Item, 'UNKNOWN')
END AS Item,
CASE WHEN (GROUPING(Color) = 1) THEN 'ALL'
ELSE ISNULL(Color, 'UNKNOWN')
END AS Color,
SUM(Quantity) AS QtySum
FROM Inventory
GROUP BY Item, Color WITH ROLLUP

Item Color QtySum
-------------------- -------------------- --------------------------
Chair Blue 101.00
Chair Red 210.00
Chair ALL 311.00
Table Blue 124.00
Table Red 223.00
Table ALL 347.00
ALL ALL 658.00

(7 row(s) affected)

若查詢中的 ROLLUP 關鍵字變更成 CUBE,CUBE 結果集將保持不變,但最後將傳回兩個額外的資料列:

ALL Blue 225.00
ALL Red 433.00

CUBE 運算子將產生 Item 與 Color 之可能數值組合的資料列。例如,CUBE 不只會報告 Color 數值連同 Item 數值 Chair (Red、Blue 與 Red + Blue) 的所有可能組合,它也會報告 Item 數值連同 Color 數值 Red (Chair、Table 與 Chair + Table) 的所有可能組合。

對於 GROUP BY 子句右邊資料行中的每個數值,ROLLUP 作業並不會報告左邊資料行 (或多個資料行) 的所有可能數值組合。例如,ROLLUP 並不會針對每個 Color 數值報告 Item 數值的所有可能組合。

ROLLUP 作業之結果集的作用和 COMPUTE BY 傳回的結果集類似;不過,ROLLUP 具有下列優點:

ROLLUP 將傳回一個結果集;COMPUTE BY 則傳回多個結果集,它將增加應用程式碼的複雜度。


ROLLUP 可用於伺服端資料指標 (Server Cursor);而 COMPUTE BY 則不能。


有時候查詢最佳化器 (Query Optimizer) 產生的 ROLLUP 執行計劃 (Execution Plan) 會比 COMPUTE BY 的執行計劃來得有效率。
pwlxj 2004-12-08
  • 打赏
  • 举报
回复
SELECT stu_no,stu_name, score
FROM tbname
where stu_no < 100003
UNION
SELECT stu_no='null' , stu_name ='合计', SUM(score) AS scroe
FROM scroes
where stu_no < 100003

真是不好意思,还掉了一个子句
pwlxj 2004-12-08
  • 打赏
  • 举报
回复
上边的三个字段间少了一个 " , "
pwlxj 2004-12-08
  • 打赏
  • 举报
回复
SELECT stu_no stu_name score
FROM tbname
UNION
SELECT stu_no='null' , stu_name ='合计', SUM(score) AS scroe
FROM scroes
where stu_no < 100003


--已经调试通过
iamltd 2004-12-08
  • 打赏
  • 举报
回复
关联的多的话建议用临时表
关联少就可以直接照上面的SQL一句话搞定
awaterking 2004-12-08
  • 打赏
  • 举报
回复
50分没人要?
awaterking 2004-12-08
  • 打赏
  • 举报
回复
在oracle里提了一下没有满意的答案。
http://community.csdn.net/Expert/topic/3626/3626169.xml?temp=.2323419
如果 from 和where的内容比较多
这样会不会效率比较低?
select stu_no,stu_name,score from tbname where stu_no<100003
union all
select '','合计',sum(score),from tbname where stu_no<100003;
实际上第一个select已经把第二次要用的结果选出来了呀,如果不用临时表,怎样利用这个结果?
我是举的一个简化的例子,实际上要关联的表较多,数据量较大,有没有好一点的办法?

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧