Sql2000 特殊字段汇总 求解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sql2000 特殊字段汇总 求解相关的知识,希望对你有一定的参考价值。
某字段 C_Num
记录为 1=100,2=100,3=100,10=100,30=100,44=100
2=100,8=100,10=100,32=100
1=100,3=100,49=100
现想汇总求出新的字段
1=200,2=200,3=200,8=100,10=200,30=100,44=100,49=100
求解 是Sql2000 哦
关于表格 我已经搞成图片的形式了.
http://www.wzway.cn/da.jpg
看来是个难题...
那我想问一下 ,不用SQL执行直接用程序,有什么好的办法把字段读取合并,排序 .我用的是VB..感谢大家!!
nomanland 你的太复杂了,有没好的?
那能不能给出程序哦 嘿嘿.我追分
然后把C_Num列的数据存到一个字符串数组list1里
再把list1里面的各项数据以逗号分割,存入一个新的字符串数组list2里。
此时list2的内容应该是
1=100
2=100
3=100
10=100
30=100
44=100
2=100
5=100
10=100
32=100
1=100
3=100
49=100
再对list2里的各项数据以逗号分割,并将字符串数据转化成int型, 生成一个新的2维int型数组list3
list3内容为
1 100
2 100
3 100
10 100
30 100
44 100
2 100
5 100
10 100
32 100
1 100
3 100
49 100
对list3的第一列取循环,如果有两行第i行,第i+n行的第一列相等则把第i+n行的第二列加到第i行上去,并删除i+n行,生成新的list3
list3内容为
1 200
2 200
3 200
10 200
30 100
44 100
5 100
32 100
49 100
再就是循环加等号和逗号,生成字符串str="1=200,2=200,3=200,8=100,10=200,30=100,44=100,49=100"
最后把(1,str)插入数据库就行了
--------------------------------------------------
我是想不出更简单的做法了,其实看看很复杂,写起来没几行的,50行不到的样子 参考技术A 好有难度···关注·
写一存储过程 实现split功能。
参考:http://blog.csdn.net/ktyang/archive/2006/10/08/1326198.aspx
然后就能将“1=100,2=100”,用","分成 "1=100","2=100"
然后再将 "1=100"以“=”分成“1”,“100”。
放入一临时表里面:
字段1 字段2
1 100
2 100
… …
然后用insert 目标表 select 字段1+'='+字段2 from 临时表 group by 字段1
据说在SQL Server里面连接两个字符串是用 加号 ,我这里没有环境,在DB2下测试了一下。
DB2下连接两个字符串是 concat(str1,str2) 函数。
用你开发程序的语言,比如JAVA,有数组,有split方法,处理起来就方便多了!
个人观点,仅供参考! 参考技术B 用存储过程搞吧
你这种非关系的数据怎么用SQL 搞呢 参考技术C 1·用游标便利
2·用逗号和等号拆分字符串
3·用insert放到新表中,每行两字段(编号、结果)
4·用sum...group by得出结果 参考技术D 能否建个TRIGGER:
你每增加一条记录,就将包含几个值,分别是多大提取出来,Insert到一个表里。
查询的时候,直接在这个表上对应的值做sum 第5个回答 2008-06-03 虽然很复杂,但很好玩。试试这个:
/*创建一个表变量,包含三个字段*/
declare @t table (
c_num char(50),
f1 int default 0,
f2 int default 0
)
declare @num varchar(50)
declare @n1 int,@n2 int
/*第一步,先把每个字段里的数据拆开*/
/*需要一个游标*/
declare @c cursor
set @c=cursor forward_only for select c_num from 你的表
open @c
fetch next from @c into @num
while @@fetch_status=0 begin
set @n1=charindex(',',@num,1)
insert @t (c_num) values (substring(@num,1,@n1-1))
while 1=1 begin
set @n2=@n1+1
set @n1=charindex(',',@num,@n1+1)
if @n1=0 begin
insert @t (c_num) values (substring(@num,@n2,len(@num)))
break
end else
insert @t (c_num) values (substring(@num,@n2,@n1-@n2))
end
fetch next from @c into @num
end
close @c
/*创建另外一个表,存放最后的结果*/
declare @r table (
c_num char(50)
)
update @t set f1=cast(substring(c_num,1,charindex('=',c_num)-1) as int),f2=cast(substring(c_num,charindex('=',c_num)+1,len(c_num)) as int)
select f1,sum(f2) from @t group by f1 order by f1
insert @r select rtrim(f1)+'='+cast(f2 as varchar(10)) from @t
SQL - 按一个字段分组并汇总另一个字段?
我有一个数据库,其中包含有关我网站上的项目的页面查看的数据。每行都有Date,ItemId(guid字符串)和Views(int)。在不同日期有许多行具有相同的ItemId。我想用视图的总和将所有这些聚合成一行。例如:
Date |ItemId |Views
2017-12-18 20:18:00 |6B3B4A9E-B64B-4BAF-9ABA-42F486CC70AB |1
2017-12-17 20:18:00 |6B3B4A9E-B64B-4BAF-9ABA-42F486CC70AB |3
2017-12-12 20:18:00 |6B3B4A9E-B64B-4BAF-9ABA-42F486CC70AB |5
2017-12-07 20:18:00 |6B3B4A9E-B64B-4BAF-9ABA-42F486CC70AB |1
我想得到以下内容:
ItemId | Views
6B3B4A9E-B64B-4BAF-9ABA-42F486CC70AB | 10
另外,我需要能够按日期过滤,比如WHERE [Date] between '12/15/2017' and GetDate()
Where子句很简单,但如何进行分组/求和?请记住,我不是只汇总一个ItemId,我想将ItemId相同的所有行分组,以便我可以得到每个项目的视图总和。
只需使用GROUP BY
:
SELECT
ItemId,
SUM(Views) AS Views
FROM yourTable
WHERE [Date] BETWEEN '2017-12-15' AND GETDATE()
GROUP BY ItemId;
附注,但here is a link到MSDN文档描述什么是SQL Server的有效日期/时间文字。我更喜欢使用上面给出的ISO格式,但你使用的m/d/y
也是有效的。
我认为您需要一个子查询,以便WHERE子句限制不会更改整体视图计数。如下的东西:
SELECT
ItemId,
sum(Views) as viewCount
FROM table t1
WHERE exists (Select itemid From table t2 Where t2.itemid = t1.itemid and [Date] BETWEEN '2017-12-15' AND GETDATE())
GROUP BY ItemId;
以上是关于Sql2000 特殊字段汇总 求解的主要内容,如果未能解决你的问题,请参考以下文章
SQL2000.特殊insert.要插入包含单引号与逗号的值.请高手解答!
thinkphp5 怎么用odbc连接sql2000 ,报错,求解
安装SQL Sever 2000好后,服务管理器中“服务器”,和‘服务’是空白!求解?