例TABLE1 级别表
列1
A
B
C
例 TABLE2 数据表
姓名 级别
汪峰
林峰
马国明
房祖名
怎么把TABLE1表数据(A,B,C),随机填充到TABLE2表的"级别"列里呢。
------解决方案--------------------
IF object_id('tempdb..#ta') is not null
DROP table #ta;
IF object_id('tempdb..#tb') is not null
DROP table #tb;
CREATE TABLE #ta ([级别] CHAR(1))
INSERT #ta ([级别])
SELECT 'A' UNION ALL
SELECT 'B' UNION ALL
SELECT 'C'
CREATE TABLE #tb ([姓名] CHAR(8),[级别] CHAR(1))
INSERT #tb ([姓名])
SELECT '汪峰' UNION ALL
SELECT '林峰' UNION ALL
SELECT '马国明' UNION ALL
SELECT '房祖名'
GO
;WITH a1 AS
(
SELECT *,(ROW_NUMBER() OVER(ORDER BY [级别]))-1 re FROM #ta
)
,a2 AS
(
SELECT *,(ROW_NUMBER() OVER(ORDER BY NEWID()))%3 re FROM #tb
)
UPDATE a SET [级别]=b.[级别]
FROM a2 a
INNER JOIN a1 b ON a.re=b.re
SELECT * FROM #tb
------解决方案--------------------
create table #a(列1 varchar(20))
insert into #a values('a'),('b'),('c')
create table #b(姓名 varchar(20),级别 varchar(20))
insert into #b
select '汪峰',null union all
select '林峰',null union all
select '马国明',null union all
select '房祖名',null
declare @name varchar(20)
declare mycursor cursor for
select 姓名 from #b
open mycursor
fetch next from mycursor into @name
while @@FETCH_STATUS=0
begin
declare @a int,@b varchar(2)
select @a=left(rand()*10,1)
while @a>3 or @a<1
begin
select @a=left(rand()*10,1)
end
;with cte as
(
select ROW_NUMBER()over(order by 列1)id,* from #a
)
select @b=列1 from cte where id=@a
update #b set 级别=@b where 姓名=@name
fetch next from mycursor into @name
end
close mycursor
deallocate mycursor
-------------------------------------------------
姓名 级别
-------------------- --------------------
汪峰 b
林峰 c
马国明 a
房祖名 b
(4 行受影响)
------解决方案--------------------
;with TABLE1(级别) as
(
select 'A'
union all select 'B'
union all select 'C'
),
TABLE2(姓名) as
(
select '汪峰'
union all select '林峰'
union all select '马国明'
union all select '房祖名'
)
select 姓名,级别=(select top 1 级别 from (select distinct 姓名,级别 from TABLE2,TABLE1 )b where a.姓名=b.姓名 order by NEWID())
from TABLE2 a
/*
姓名 级别
汪峰 A
林峰 C
马国明 B
房祖名 C
*/