我有两个表(last_name表)和(族表),它们通过姓氏相互关联...所以last_name表中的每个姓都在族表中有许多族...现在我想选择50%的每个姓氏的家庭..我怎么能这样做...
select top 50 percent
family_id ,
family_name ,
last_name
from
families
where
last_name = 'here i want all of last name'
之后我想计算我从家庭中为每个last_name选择的所有家庭。 谢谢
答案 0 :(得分:0)
不需要C#或循环,下面的解决方案可能并不理想,但应该朝着正确的方向迈出一步:
SELECT F.family_id, F.family_name, F.last_name FROM
(SELECT family_id, family_name, last_name,
ROW_NUMBER() OVER (PARTITION BY last_name ORDER BY last_name) RowNo
FROM families) F
INNER JOIN (
SELECT last_name, Count(1) as FamCount
FROM families
GROUP BY last_name) GR
ON F.last_name = GR.last_name
AND F.RowNo <= GR.FamCount / 2
这里的想法是:第一个内部选择为每个家庭提供相同的姓氏和行号。第二个选择获取相同姓氏的家庭总数。并且联接获得了每个家庭的一半选择。
以下是演示:http://sqlfiddle.com/#!3/2900e4/3该表有4个姓氏为Johnson的家庭和6个带有Patterson的家庭。并且查询恭敬地返回2和3个家庭。
获得此结果后,您可以执行其他操作(例如,按姓氏分组以从选择中获取计数)