关于数据库里随机的问题,急,给高分
时间:2011-11-23
来源:互联网
id name
1 张三
2 李四
3 王二麻子
4 赵九
表二
id nameid
1 1,3,4
2 2,3,4
3 4,8,2
从表一中随机抽出三条记录的id,按顺序插入表二中,表二本来就有数据
是update 到nameid这个字段中
作者: CSDN_HSB 发布时间: 2011-11-23
作者: qianjin036a 发布时间: 2011-11-23
随机用order by NEWID()
作者: fredrickhu 发布时间: 2011-11-23
作者: CSDN_HSB 发布时间: 2011-11-23
SQL code
SELECT TOP 3 * INTO #TEMP FROM TABLE1 INSERT ITNO TABLE1 SELECT * FROM #TEMP UPDATE table2 set nameid=name from #temp a join daoru b on a.id=b.id
这样。。?没经过。。。不了解。。的路过。。
作者: lcqtgb 发布时间: 2011-11-23
/****************************************************************************************************************************************************** 合并分拆表数据 整理人:中国风(Roy) 日期:2008.06.06 ******************************************************************************************************************************************************/ --> --> (Roy)生成測試數據 if not object_id('Tab') is null drop table Tab Go Create table Tab([Col1] int,[Col2] nvarchar(1)) Insert Tab select 1,N'a' union all select 1,N'b' union all select 1,N'c' union all select 2,N'd' union all select 2,N'e' union all select 3,N'f' Go 合并表: SQL2000用函数: go if object_id('F_Str') is not null drop function F_Str go create function F_Str(@Col1 int) returns nvarchar(100) as begin declare @S nvarchar(100) select @S=isnull(@S+',','')+Col2 from Tab where Col1=@Col1 return @S end go Select distinct Col1,Col2=dbo.F_Str(Col1) from Tab go SQL2005用XML: 方法1: select a.Col1,Col2=stuff(b.Col2.value('/R[1]','nvarchar(max)'),1,1,'') from (select distinct COl1 from Tab) a Cross apply (select COl2=(select N','+Col2 from Tab where Col1=a.COl1 For XML PATH(''), ROOT('R'), TYPE))b 方法2: select a.Col1,COl2=replace(b.Col2.value('/Tab[1]','nvarchar(max)'),char(44)+char(32),char(44)) from (select distinct COl1 from Tab) a cross apply (select Col2=(select COl2 from Tab where COl1=a.COl1 FOR XML AUTO, TYPE) .query(' <Tab> {for $i in /Tab[position() <last()]/@COl2 return concat(string($i),",")} {concat("",string(/Tab[last()]/@COl2))} </Tab>') )b SQL05用CTE: ;with roy as(select Col1,Col2,row=row_number()over(partition by COl1 order by COl1) from Tab) ,Roy2 as (select COl1,cast(COl2 as nvarchar(100))COl2,row from Roy where row=1 union all select a.Col1,cast(b.COl2+','+a.COl2 as nvarchar(100)),a.row from Roy a join Roy2 b on a.COl1=b.COl1 and a.row=b.row+1) select Col1,Col2 from Roy2 a where row=(select max(row) from roy where Col1=a.COl1) order by Col1 option (MAXRECURSION 0) 生成结果: /* Col1 COl2 ----------- ------------ 1 a,b,c 2 d,e 3 f (3 行受影响) */ --参考 拆分表: --> --> (Roy)生成測試數據 if not object_id('Tab') is null drop table Tab Go Create table Tab([Col1] int,[COl2] nvarchar(5)) Insert Tab select 1,N'a,b,c' union all select 2,N'd,e' union all select 3,N'f' Go --SQL2000用辅助表: if object_id('Tempdb..#Num') is not null drop table #Num go select top 100 ID=Identity(int,1,1) into #Num from syscolumns a,syscolumns b Select a.Col1,COl2=substring(a.Col2,b.ID,charindex(',',a.Col2+',',b.ID)-b.ID) from Tab a,#Num b where charindex(',',','+a.Col2,b.ID)=b.ID --也可用 substring(','+a.COl2,b.ID,1)=',' --2000不使用辅助表 Select a.Col1,COl2=substring(a.Col2,b.number,charindex(',',a.Col2+',',b.number)-b.number) from Tab a join master..spt_values b ON B.type='p' AND B.number BETWEEN 1 AND LEN(A.col2) where substring(','+a.COl2,b.number,1)=',' SQL2005用Xml: select a.COl1,b.Col2 from (select Col1,COl2=convert(xml,'<root><v>'+replace(COl2,',','</v><v>')+'</v></root>') from Tab)a outer apply (select Col2=C.v.value('.','nvarchar(100)') from a.COl2.nodes('/root/v')C(v))b SQL05用CTE: ;with roy as (select Col1,COl2=cast(left(Col2,charindex(',',Col2+',')-1) as nvarchar(100)),Split=cast(stuff(COl2+',',1,charindex(',',Col2+','),'') as nvarchar(100)) from Tab union all select Col1,COl2=cast(left(Split,charindex(',',Split)-1) as nvarchar(100)),Split= cast(stuff(Split,1,charindex(',',Split),'') as nvarchar(100)) from Roy where split>'' ) select COl1,COl2 from roy order by COl1 option (MAXRECURSION 0) 生成结果: /* Col1 COl2 ----------- ----- 1 a 1 b 1 c 2 d 2 e 3 f */
作者: fredrickhu 发布时间: 2011-11-23
create table tb(id int,name nvarchar(10)) insert into tb select 1,'张三' insert into tb select 2,'李四' insert into tb select 3,'王二麻子' insert into tb select 4,'赵九' insert into tb select 5,'王3麻子' insert into tb select 6,'王4麻子' insert into tb select 7,'王5麻子' insert into tb select 8,'王6麻子' insert into tb select 9,'王7麻子' create table t2(id int,nameid nvarchar(10)) insert into t2 select 1,'1,3,4' insert into t2 select 2,'2,3,4' insert into t2 select 3,'4,8,2' go declare @i int set @i=1 while exists(select 1 from t2 where id>=@i) begin update t2 set nameid=( select stuff((select ','+LTRIM(id) from( select top 3 id from tb order by newid() )t for xml path('')),1,1,'') ) where id=@i set @i=@i+1 end go select * from t2 /* id nameid ----------- ---------- 1 9,5,1 2 6,9,1 3 2,3,8 (3 行受影响) */ go drop table tb,t2
作者: qianjin036a 发布时间: 2011-11-23
怎么分?怎么扯?
直接根据nameid和表一ID更新成对应的name就是了
也不用什么拆分合并
作者: sql_sf 发布时间: 2011-11-23
declare @str varchar(20) udpate 表2 set nameid=@str, @str=stuff((select ','+rtrim(id) from 表1 order by newid() for xml path('')),1,1,'')
作者: ssp2009 发布时间: 2011-11-23
declare @str varchar(20) update 表2 set nameid=@str, @str=stuff((select top 3 ','+rtrim(id) from 表1 order by newid() for xml path('')),1,1,'')
作者: ssp2009 发布时间: 2011-11-23
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28