createTableT
(
idint,
aint,
bint
)
Insertintotvalues(1,1,1)
Insertintotvalues(2,2,1)
Insertintotvalues(3,3,1)
Insertintotvalues(4,4,1)
Insertintotvalues(5,5,1)
Insertintotvalues(6,6,1)
/*思路:
id可能不连续,所以先用id排序,产生一个记录号id2
然后按3条记录一组产生一个分组号G,接着按G分组求和,id取最大
最后更新
*/
WithCT
AS
(
Selectmax(id)Asid,SUM(a)AsA,SUM(B)AsB
from
(
Select*,(id2+2)/3AsG
from(Select*,ROW_NUMBER()over(orderbyid)Asid2fromT)S
)MGroupbyG
)
UpdateTSeta=CT.A-T.a,b=CT.B-T.b
FromCT
whereT.id=CT.id
㈡ sqlserver中求平均值跟求和语句
平均值
select avg(某字段) from al;
求和
select sum(某字段) from al;
㈢ SQL查询求和
--SQLServer:
selectsum(casewhenaisnullora=0thenisnull(b,0)elseaend)
fromtable1
--Oracle:
selectsum(casewhenaisnullora=0thennvl(b,0)elseaend)
fromtable1
㈣ 数据库中价格字段是varchar类型怎样在sql语句中使用sum函数计算总和
实现的方法和步骤如下:
1、首先,打开数据库连接客户端Navicat
Premium并创建一个新的表结构,其中age列有意设置为varchar,如下图所示,然后进入下一步。
㈤ sql 按类型分组求和
参考sql语句
select no ,
max(case when type=1 then type) else null end) type1,
max(case when type=2 then type) else null end) type2,
sum(case when type=1 then sumsource) else null end) source1,
sum(case when type=2then sumsource) else null end) source2,
from(
selct no , type, sum(source) sumsource
group by no,type
)
㈥ sql server 求和后如何分页请看SQL语句
四种方式实现SQLServer
分页查询
SQLServer
的数据分页:
假设现在有这样的一张表:
CREATE
TABLE
test
(
id
int
primary
key
not
null
identity,
names
varchar(20)
)
然后向里面插入大约1000条数据,进行分页测试
假设页数是10,现在要拿出第5页的内容,查询语句如下:
--10代表分页的大小
select
top
10
*
from
test
where
id
not
in
(
--40是这么计算出来的:10*(5-1)
select
top
40
id
from
test
order
by
id
)
order
by
id
原理:需要拿出数据库的第5页,就是40-50条记录。首先拿出数据库中的前40条记录的id值,然后再拿出剩余部分的前10条元素
第二种方法:
还是以上面的结果为例,采用另外的一种方法
--数据的意思和上面提及的一样
select
top
10
*
from
test
where
id
>
(
select
isnull(max(id),0)
from
(
select
top
40
id
from
test
order
by
id
)
A
)
order
by
id
原理:先查询前40条记录,然后获得其最id值,如果id值为null的,那么就返回0
然后查询id值大于前40条记录的最大id值的记录。
这个查询有一个条件,就是id必须是int类型的。
第三种方法:
select
top
10
*
from
(
select
row_number()
over(order
by
id)
as
rownumber,*
from
test
)
A
where
rownumber
>
40
原理:先把表中的所有数据都按照一个rowNumber进行排序,然后查询rownuber大于40的前十条记录
这种方法和oracle中的一种分页方式类似,不过只支持2005版本以上的
第四种:
存储过程查询
创建存储过程
alter
procere
pageDemo
@pageSize
int,
@page
int
AS
declare
@temp
int
set
@temp=@pageSize*(@page
-
1)
begin
select
top
(select
@pageSize)
*
from
test
where
id
not
in
(select
top
(select
@temp)
id
from
test)
order
by
id
end
执行存储过程
exec
10,5
㈦ sqlserver 利用sum求和时,sum时相同的id值加一次
你这个需求很不明确
如果只是按id来汇总,直接group by id就可以
如果想跳开相同AID,可以用distinct关键字跳开就行
㈧ 关于sqlserver分组求和的问题
这个问题主要是分组
我模拟了第一层你要分组的数据
分组sql
select substr(code,1,7), sum(a),sum(b),sum(c),sum(d) from test1 group by substr(code,1,7)
结果:
code sum(a) sum(b)sum(c) sum(d)
1 1010101 16 20 24 28
2 1010104 100 140 180 220
接下来通过结果集更新code 所在的记录
下面的过程就是重复的根据substr(code,起始位置,后移多少位) 来进行分组求和
更新。。
希望能帮到你
㈨ sqlserver 数据库 通过sql语句 把数据类型相等的字段的 值 进行相加
数字就直接相加,结果是和。如 3+4=7
字符相加是组合:如 'aa'+'bb'='aabb'
日期+日期是时间:2个时间分别与1900年1月1日相差的和。
如:日期1+日期2=(日期1 - '1900-1-1')+(日期2 -'1900-1-1')+'1900-1-1'
㈩ sql server 一段语句求多个和。
1 先按人名和支付方式汇总
2 行列转换
sqlserver行列转换知识
createtableA(namevarchar(10),sortvarchar(30),qint)
insertintoAvalues('A','现金',19)
insertintoAvalues('A','现金',19)
insertintoAvalues('B','现金',19)
insertintoAvalues('C','现金',19)
insertintoAvalues('A','微信',19)
insertintoAvalues('A','银行卡',19)
insertintoAvalues('A','支付宝',19)
go
select*from
(
selectname,sort,sum(q)asqtyallfromA
groupbyname,sort
)ast
pivot(sum(qtyall)forsort
in([现金],[银行卡],[微信],[支付宝]))
t;
go
droptableA
如有疑问,及时沟通!