有两个表
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类’但是现在类别很多,一条一条写太多,如何用一个语句能搞定?熟悉的朋友帮忙啊。谢谢!!
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类’但是现在类别很多,一条一条写太多,如何用一个语句能搞定?熟悉的朋友帮忙啊。谢谢!!
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)
cross apply(select top percent 70 * from B where classid=m.classid) n
修正:
select top 70 percent * from B where classId=‘A类’