100分求特别简单问题:数据汇总。在线等

hongfeng8686 2007-06-20 09:38:49
有这样一个表:


a b c d

1 12:00 123 34
1 11:00 123 34
1 13:00 234 34
1 14:00 123 34
1 15:00 345 45
2 6:00 789 67
2 6:00 098 67

这个数据表的特点是在c字段中不重复的数据在d字段中可能重复。

我现在要做的是把这个表中的c字段中重复的数据只调出来一个的同时把b字段中所有重复的时间全部放在一个字段里面,然后放入一张新表中。
就是说c字段重复的数据只要一条,但b字段中的内容却要在新表中的一行中同时出现。
不知道我说的是否明白。
我想要得到的结果如下:用c字段下的123为例:

1 12:00/11:00/14:00 123 34

就是这样的效果,由于本人没学过VB,不知道代码怎么写。高手们快给解答一下吧。在线等在线送分。
...全文
242 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
bote_china 2007-06-21
  • 打赏
  • 举报
回复
1、建立一个标量函数
ALTER FUNCTION dbo.fn_GetAllb
(
@C int
)
RETURNS varchar(400)
BEGIN
declare @ret varchar(400)
select @ret =@ret + cast(b as varchar) + "/" from tab where c=@C
set @ret =left(len(@ret)-1)
return @ret
end
2、查询语句
select a,dbo.fn_getalla(c) as b,c,d from (select distinct a,c ,d from tab) Taba

hongfeng8686 2007-06-21
  • 打赏
  • 举报
回复
我没太看懂。我要在SQL2000里面进行操作。我会的太少。
SassyBoy 2007-06-21
  • 打赏
  • 举报
回复
怎么会呢,你怎样用的?
SassyBoy 2007-06-20
  • 打赏
  • 举报
回复
你想用vb/c#/sql2k/sql2k5哪一种语言呢?
hawking8987 2007-06-20
  • 打赏
  • 举报
回复
沙发 帮顶!
whory 2007-06-20
  • 打赏
  • 举报
回复
帮顶, 看不懂...
showrock 2007-06-20
  • 打赏
  • 举报
回复
关注,楼上的怎么用不成呢?
SassyBoy 2007-06-20
  • 打赏
  • 举报
回复
贴个给你自己看了。不写了,很累。


无论是在sql 2000, 还是在 sql 2005 中,都没有提供字符串的聚合函数, 所以, 当我们在处理下列要求时,会比较麻烦:


有表tb, 如下:

id value

----- ------

1 aa

1 bb

2 aaa

2 bbb

2 ccc


需要得到结果:

id values

------ -----------

1 aa,bb

2 aaa,bbb,ccc


即, group by id, 求 value 的和(字符串相加)


1. 旧的解决方法

-- 1. 创建处理函数

CREATE FUNCTION dbo.f_str(@id int)

RETURNS varchar(8000)

AS

BEGIN

DECLARE @r varchar(8000)

SET @r = ''

SELECT @r = @r + ',' + value

FROM tb

WHERE id=@id

RETURN STUFF(@r, 1, 1, '')

END

GO


-- 调用函数

SELECt id, values=dbo.f_str(id)

FROM tb

GROUP BY id


-- 2. 新的解决方法

-- 示例数据

DECLARE @t TABLE(id int, value varchar(10))

INSERT @t SELECT 1, 'aa'

UNION ALL SELECT 1, 'bb'

UNION ALL SELECT 2, 'aaa'

UNION ALL SELECT 2, 'bbb'

UNION ALL SELECT 2, 'ccc'


-- 查询处理

SELECT *

FROM(

SELECT DISTINCT

id

FROM @t

)A

OUTER APPLY(

SELECT

[values]= STUFF(REPLACE(REPLACE(

(

SELECT value FROM @t N

WHERE id = A.id

FOR XML AUTO

), '<N value="', ','), '"/>', ''), 1, 1, '')

)N


/*--结果

id values

----------- ----------------

1 aa,bb

2 aaa,bbb,ccc


(2 行受影响)

--*/

CathySun118 2007-06-20
  • 打赏
  • 举报
回复
游标可以实现
tyouvivi 2007-06-20
  • 打赏
  • 举报
回复
如果是C不重复
把主键做为c就行了
tyouvivi 2007-06-20
  • 打赏
  • 举报
回复
给个思路,把a,c,d做为Key建一新表
循环将当前表数据插入新表中,出现主键重复则在Exception中改为更新,更新的b字段把当前行的b加上去就行了。
插入就不写了
Update Temp set b = Temp.b + '/' + ThisRow.b Where abc相等
SassyBoy 2007-06-20
  • 打赏
  • 举报
回复
先在sql处理一下再取出来比较好
SassyBoy 2007-06-20
  • 打赏
  • 举报
回复
==
hongfeng8686 2007-06-20
  • 打赏
  • 举报
回复
当然是vb了啊!要不然也不会在这个里面发问题了啊!

16,721

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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