日期:2014-05-17  浏览次数:20811 次

求一语句。
表A有
name  age
张三  20
李四  25
王五  0
赵六  0
-----
表B有
no age
1   25
2   26
3   27
------
比方我要得到一个结果,搜索表A数据,只要年龄为0的,就在表B中随机读取一个。
假如我这样写,select name, case when age='0' then (select top 1 age from B Order By NewID() else age end) from A 。这样每次的结果王五和赵六的值都一样,我需要的是每次王五和赵六都是独立的从表B读取一个值。
求解?

------解决方案--------------------
select name, age from tba where age!=0
union all
select name,age from (select tba.name,tbb.age,row=row_number()over(partition by tba.[name] order by checksum(newid())) from tba,tbb where tba.age=0)t where row=1