C# 按百分比获取表中每个值的数据

C# 按百分比获取表中每个值的数据,c#,sql,C#,Sql,我有两个表last_name表和families表,它们通过姓氏相互关联。。。所以姓表中的每个姓在族表中都有许多族。。现在,我想为每个姓氏选择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表和families表,它们通过姓氏相互关联。。。所以姓表中的每个姓在族表中都有许多族。。现在,我想为每个姓氏选择50%的家族。。请问我怎么做

select top 50 percent 
    family_id , 
    family_name , 
    last_name 
from 
    families 
where 
    last_name = 'here i want all of last name'
之后,我要计算从每个姓氏的族中选择的所有族。。
谢谢您

不需要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
这里的想法是:第一个内部选择为每个姓氏相同的族提供一个行号。第二个选择获取相同姓氏的族总数。联接将为每个族获得一半的选择

下面是演示:这张桌子上有4个姓约翰逊的家庭,6个姓帕特森的家庭。查询将分别返回2个和3个族


获得此结果后,您可以执行其他操作,例如按姓氏分组以从选择中获取计数

为什么问题上有c标记?看起来像是sql唯一的问题。对。。但是如果需要C,可能需要foreach循环来实现这一点。。所以我把c和sqlthank放在一起非常非常感谢Yuriy galanter。。它是完美的,非常有用,你好,尤里。。谢谢你的代码。。。只有一件事。。选择百分比时。。如果选择的姓氏是3.5,我想知道。。我想要它4,如果在3.5中选择的姓氏小于5。。我想要它。。我该怎么做。。请你详细解释一下好吗?例如,如果有7个家庭,你希望50%变成4个?是的,我希望。。如果选择3.5、3.6、3.7、3.8、3.9,请选择4个族。。。如果选择3.4、3.3、3.2、3.1,请选择3个族。。这就像CTSQL中的round方法一样,也有一个round函数可以使用。尝试用这一行替换最后一行:和F.RowNo