日期:2014-05-18  浏览次数:20486 次

sql 循环查询
有两个表
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类’

但是现在类别很多,一条一条写太多,如何用一个语句能搞定?

熟悉的朋友帮忙啊。谢谢!!
 

------解决方案--------------------
SQL code

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)

------解决方案--------------------
SQL code
select distinct n.* from B m
cross apply(select top percent 70 * from B where classid=m.classid) n

------解决方案--------------------
探讨

SQL code

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……

------解决方案--------------------
各位请注意一点:select top percent 70 * from B where classId=‘A类’

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