计算总数

空怀 2011-03-30 11:11:07
数据库表中有一数量字段,是varchar型。记录的数据都是一些数量(带单位) 如25ml 50g等,单位有很多。
现在我想按某一条件得到数量的总和 怎么计算(同一单位的)。
...全文
99 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
空怀 2011-03-31
  • 打赏
  • 举报
回复
如何数量中带小数点呢,怎么弄?
pt1314917 2011-03-30
  • 打赏
  • 举报
回复

select sum(SUBSTRING(字段,1,patindex('%[^0-9]%',字段)-1))
from 表名 group by SUBSTRING(字段,patindex('%[^0-9]%',字段),LEN(字段))
--不过尽量设计表时还是将数据和单位分开。否则后期处理起来效率高,难度也增大了。

bluesmiler 2011-03-30
  • 打赏
  • 举报
回复

create table tb (col varchar(100))
insert into tb values ('50g')
insert into tb values ('40g')
insert into tb values ('60ml')

select
sum(cast(left(col,patindex('%[^0-9]%',col)-1) as int)),
right(col,LEN(col)-patindex('%[^0-9]%',col)+1)
from tb
group by right(col,LEN(col)-patindex('%[^0-9]%',col)+1)

----------- ----------------------------------------------------------------------------------------------------
90 g
60 ml

(2 行受影响)
javatemptation 2011-03-30
  • 打赏
  • 举报
回复

use tempdb;
/*
create table t2
(
[id] nvarchar(10) not null
);
insert into t2(id)
values
('25ml'),
('50ml'),
('75ml'),
('50g'),
('25g');
*/
select SUM(id1) as [ml的总和],SUM(id2) as [g的总和]
from
(
select
case when id like '%ml' then CAST(left(id,LEN(id)-2) as int) end as [id1],
case when id like '%g' then CAST(left(id,LEN(id)-1) as int) end as [id2]
from t2
) as t;
快溜 2011-03-30
  • 打赏
  • 举报
回复
select sum(cast(left(字段,PATINDEX('%[^0-9]%',字段)-1) as int)) 
from tb group by right(字段,len(字段)-PATINDEX('%[^0-9]%',字段))
快溜 2011-03-30
  • 打赏
  • 举报
回复
select sum(left(字段,PATINDEX('%[^0-9]%',字段)-1)) 
from tb group by right(字段,len(字段)-PATINDEX('%[^0-9]%',字段))
chuanzhang5687 2011-03-30
  • 打赏
  • 举报
回复
先是数据字段分离,然后相加 可以吧相同单位的字段分成两个字段一个是数一个是单位,然后数相加,最后合并字段
bluesmiler 2011-03-30
  • 打赏
  • 举报
回复
create table tb (col varchar(100))
insert into tb values ('50g')
insert into tb values ('60g')

select sum(cast (replace(col,'g','') as int)) from tb
where col like '%g%'
playwarcraft 2011-03-30
  • 打赏
  • 举报
回复
修改table设计,将其分开2个栏位
一个纯数字,一个纯单位
沉默肥牛 2011-03-30
  • 打赏
  • 举报
回复
select sum(SUBSTRING(字段,1,patindex('%[^0-9]%',字段)-1))
from 表名 group by SUBSTRING(字段,patindex('%[^0-9]%',字段),LEN(字段))

34,590

社区成员

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

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