急!TSql中合并内容问题,分组-过滤-合并

ji983546935 2013-08-23 03:54:28
我插入数据库的时候把内容安一定规则分割成几条数据 并标识出是第几条
MOBILE_NO	SMS_CONTENT	INTO_TIME	MSGSUB	MSGSUM
13269379030 1.短信内容不能为空 2.发送手机不能为空 3.70字以内计费一条,超过70字按每67条来计算 4.给多个号码发送按','分割 5.发送内容 2013-08-23 15:28:57.730 1 3
13269379030 中不能包含敏感字 6.系统会自动过滤无效和重复手机号 1.短信内容不能为空 2.发送手机不能为空 3.70字以内计费一条,超过70字按 2013-08-23 15:28:57.730 2 3
13269379030 每67条来计算 4.给多个号码发送按','分割 5.发送内容中不能包含敏感字 6.系统会自动过滤无效和重复手机号 2013-08-23 15:28:57.730 3 3


就想通过MSGSUB的顺序把手机号和时间相同的而且MSGSUM也相同的 SMS_CONTENT合并成一条数据
最好写成试图 ,合并后
MOBILE_NO	SMS_CONTENT	INTO_TIME
13269379030 1.短信内容不能为空 2.发送手机不能为空 3.70字以内计费一条,超过70字按每67条来计算 4.给多个号码发送按','分割 5.发送内容中不能包含敏感字 6.系统会自动过滤无效和重复手机号 1.短信内容不能为空 2.发送手机不能为空 3.70字以内计费一条,超过70字按每67条来计算 4.给多个号码发送按','分割 5.发送内容中不能包含敏感字 6.系统会自动过滤无效和重复手机号 2013-08-23 15:28:57.730

...全文
87 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
---涛声依旧--- 2013-08-23
  • 打赏
  • 举报
回复
引用 楼主 ji983546935 的回复:
就想通过MSGSUB的顺序把手机号和时间相同的而且MSGSUM也相同的 SMS_CONTENT合并成一条数据

CREATE VIEW [dbo].[V_Test]
AS
select MOBILE_NO,
sms_content = (SELECT ''+sms_content FROM T_Test WHERE MOBILE_NO=a.MOBILE_NO AND MSGSUM=a.MSGSUM ORDER BY msgsub FOR XML PATH('')),
MIN(into_time) as into_time
from T_Test a
GROUP BY MOBILE_NO,MSGSUM --修正一下:把手机号和时间相同的而且MSGSUM也相同的
---涛声依旧--- 2013-08-23
  • 打赏
  • 举报
回复
CREATE TABLE T_Test
(MOBILE_NO VARCHAR(20),
SMS_CONTENT VARCHAR(4000),
INTO_TIME DATETIME,
MSGSUB INT,
MSGSUM INT)
INSERT INTO T_Test(MOBILE_NO,SMS_CONTENT,INTO_TIME,MSGSUB,MSGSUM)
VALUES('13269379030'
,'1.短信内容不能为空 2.发送手机不能为空 3.70字以内计费一条,超过70字按每67条来计算 4.给多个号码发送按,分割 5.发送内容'
,'2013-08-23 15:28:57.730',	1,	3)
,('13269379030','中不能包含敏感字 6.系统会自动过滤无效和重复手机号 1.短信内容不能为空 2.发送手机不能为空 3.70字以内计费一条,超过70字按','2013-08-23 15:28:57.730',2,3)
,('13269379030','每67条来计算 4.给多个号码发送按,分割 5.发送内容中不能包含敏感字 6.系统会自动过滤无效和重复手机号'
,'2013-08-23 15:28:57.730',3,3)
,('1234567890','test',GETDATE(),1,1)
,('1234567891','test1',GETDATE(),1,2)
,('1234567891','test1',GETDATE(),2,2)

--查询
select MOBILE_NO,
sms_content = (SELECT ''+sms_content FROM T_Test WHERE MOBILE_NO=a.MOBILE_NO ORDER BY msgsub FOR XML PATH('')),
MIN(into_time) as into_time
from T_Test a
GROUP BY MOBILE_NO
--结果
/*
MOBILE_NO	sms_content	into_time
1234567890	test	2013-08-23 16:35:09.757
1234567891	test1test1	2013-08-23 16:35:09.757
13269379030	1.短信内容不能为空 2.发送手机不能为空 3.70字以内计费一条,超过70字按每67条来计算 4.给多个号码发送按,分割 5.发送内容中不能包含敏感字 6.系统会自动过滤无效和重复手机号 1.短信内容不能为空 2.发送手机不能为空 3.70字以内计费一条,超过70字按每67条来计算 4.给多个号码发送按,分割 5.发送内容中不能包含敏感字 6.系统会自动过滤无效和重复手机号	2013-08-23 15:28:57.730
*/
Shawn 2013-08-23
  • 打赏
  • 举报
回复
if OBJECT_ID('tempdb..#temp', 'u') is not null   drop table #temp;
go
create table #temp( [MOBILE_NO] varchar(100), [SMS_CONTENT] varchar(1000), [INTO_TIME] varchar(100), [MSGSUB] varchar(100), [MSGSUM] varchar(100));
insert #temp
select '13269379030','1.短信内容不能为空 2.发送手机不能为空 3.70字以内计费一条,超过70字按每67条来计算 4.给多个号码发送按 分割 5.发送内容','2013-08-23 15:28:57.730','1','3' union all
select '13269379030','中不能包含敏感字 6.系统会自动过滤无效和重复手机号 1.短信内容不能为空 2.发送手机不能为空 3.70字以内计费一条,超过70字按','2013-08-23 15:28:57.730','2','3' union all
select '13269379030','每67条来计算 4.给多个号码发送按 分割 5.发送内容中不能包含敏感字 6.系统会自动过滤无效和重复手机号','2013-08-23 15:28:57.730','3','3' 

--SQL:
select 
	MOBILE_NO,
	sms_content = (SELECT ''+sms_content FROM #temp WHERE MOBILE_NO=a.MOBILE_NO ORDER BY msgsub FOR XML PATH('')),
	into_time=MIN(into_time)
from #temp a
GROUP BY MOBILE_NO

/*
MOBILE_NO	sms_content	into_time
13269379030	1.短信内容不能为空 2.发送手机不能为空 3.70字以内计费一条,超过70字按每67条来计算 4.给多个号码发送按 分割 5.发送内容中不能包含敏感字 6.系统会自动过滤无效和重复手机号 1.短信内容不能为空 2.发送手机不能为空 3.70字以内计费一条,超过70字按每67条来计算 4.给多个号码发送按 分割 5.发送内容中不能包含敏感字 6.系统会自动过滤无效和重复手机号	2013-08-23 15:28:57.730
*/
ji983546935 2013-08-23
  • 打赏
  • 举报
回复
!!!有木有高手?

34,588

社区成员

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

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