有两个表
A表: a_id, classId   ,className, count
     1        A类       A名称     20
     2        B类       B名称     30
     ...  ...
 
B表:b_id, classId,  property1, property2
      1        A类        v1       v2
      2        A类        v3       v4
      3        B类        v5       v6
      4        B类        v7       v8
      ...  ...我现在想得到这样一个结果:
首先从A表中找到类别以及对应的数量,
比如A类对应20条,然后在B表中随机找到属于A类的70%的明细数据
    B类对应30条,然后在B表中随机找到属于B类的70%的明细数据
等等,有好多类别如果单独找某一类的可以用如下语句:
select top percent 70 * from B where classId=‘A类’但是现在类别很多,一条一条写太多,如何用一个语句能搞定?熟悉的朋友帮忙啊。谢谢!!
                           

解决方案 »

  1.   


    select a.classid,a.count,b.* from A表 a inner join(
    select *,row_number()over(partition by classid order by newid())rn from B表
    )b on a.classid=b.classid
    where b.rn<(select count(*)*0.7 from B表 where classid=b.classid)
      

  2.   

    select distinct n.* from B m
    cross apply(select top percent 70 * from B where classid=m.classid) n
      

  3.   

    各位请注意一点:select top percent 70 * from B where classId=‘A类’这个百分比写的有点问题
    修正:
      select top 70 percent  * from B where classId=‘A类’