表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读取一个值。
求解?

解决方案 »

  1.   

    试试:select name, case when age='0' then (select top 1 age from B Order By checksum(NewID()) else age end) from A
      

  2.   

    select top 1 age from B Order By checksum(NewID()) 
    这句,我试了一下,平均1、2次就会不同,但是b表数据量多的时候,随机性才提现出来。
      

  3.   

    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