这个SQL有几种写法?

jimoshatan 2008-10-20 04:23:11

CREATE TABLE #A (S_NO VARCHAR(10),AMT INT)
INSERT INTO #A SELECT '001',20
INSERT INTO #A SELECT '002',30
INSERT INTO #A SELECT '003',20
INSERT INTO #A SELECT '004',40
INSERT INTO #A SELECT '005',25
INSERT INTO #A SELECT '006',35
INSERT INTO #A SELECT '007',60


DROP TABLE #A
/*TOT_AMT为当前记录与前面纪录的和,按照S_NO排序
S_NO AMT TOT_AMT
001 20 20
002 30 50
003 20 70
004 40 110
005 25 135
006 35 170
007 60 230
...全文
88 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
super_iven 2008-10-20
  • 打赏
  • 举报
回复
学习
fan22176391 2008-10-20
  • 打赏
  • 举报
回复
强!学习。
水族杰纶 2008-10-20
  • 打赏
  • 举报
回复
SELECT *,
SAMT=(SELECT SUM(AMT)
FROM #A
WHERE S_NO<=a.S_NO)
FROM #A AS a
liangCK 2008-10-20
  • 打赏
  • 举报
回复
CREATE TABLE #A (S_NO VARCHAR(10),AMT INT)
INSERT INTO #A SELECT '001',20
INSERT INTO #A SELECT '002',30
INSERT INTO #A SELECT '003',20
INSERT INTO #A SELECT '004',40
INSERT INTO #A SELECT '005',25
INSERT INTO #A SELECT '006',35
INSERT INTO #A SELECT '007',60

SELECT a.S_NO,a.AMT,SUM(b.AMT) SAMT
FROM #A AS a
LEFT OUTER JOIN #A AS b
ON a.S_NO>=b.S_NO
GROUP BY a.S_NO,a.AMT

DROP TABLE #A


/*
S_NO AMT SAMT
---------- ----------- -----------
001 20 20
003 20 70
005 25 135
002 30 50
006 35 170
004 40 110
007 60 230

(7 行受影响)

*/
$扫地僧$ 2008-10-20
  • 打赏
  • 举报
回复
select T.S_NO,T.AMT,
(select sum(AMT) from #A where S_NO<=T.S_NO) as TOT_AMT
from #A T
liangCK 2008-10-20
  • 打赏
  • 举报
回复
CREATE TABLE #A (S_NO VARCHAR(10),AMT INT)
INSERT INTO #A SELECT '001',20
INSERT INTO #A SELECT '002',30
INSERT INTO #A SELECT '003',20
INSERT INTO #A SELECT '004',40
INSERT INTO #A SELECT '005',25
INSERT INTO #A SELECT '006',35
INSERT INTO #A SELECT '007',60

SELECT *,
SAMT=(SELECT SUM(AMT)
FROM #A
WHERE S_NO<=a.S_NO)
FROM #A AS a


DROP TABLE #A


/*
S_NO AMT SAMT
---------- ----------- -----------
001 20 20
002 30 50
003 20 70
004 40 110
005 25 135
006 35 170
007 60 230

(7 行受影响)

*/
liangCK 2008-10-20
  • 打赏
  • 举报
回复
CREATE TABLE #A (S_NO VARCHAR(10),AMT INT)
INSERT INTO #A SELECT '001',20
INSERT INTO #A SELECT '002',30
INSERT INTO #A SELECT '003',20
INSERT INTO #A SELECT '004',40
INSERT INTO #A SELECT '005',25
INSERT INTO #A SELECT '006',35
INSERT INTO #A SELECT '007',60

SELECT *
FROM #A AS a
CROSS APPLY
(
SELECT SUM(AMT) SAMT
FROM #A
WHERE S_NO<=a.S_NO
) AS b

DROP TABLE #A


/*
S_NO AMT SAMT
---------- ----------- -----------
001 20 20
002 30 50
003 20 70
004 40 110
005 25 135
006 35 170
007 60 230

(7 行受影响)
*/

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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