Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server sql通过另一个表值从表中选择计数_Sql Server_C# 4.0 - Fatal编程技术网

Sql server sql通过另一个表值从表中选择计数

Sql server sql通过另一个表值从表中选择计数,sql-server,c#-4.0,Sql Server,C# 4.0,我是sql数据库的初学者 我需要一些帮助。。。。我有两个表families\u table和children\u table,它们通过family\u id关联,因此families表中的每个家庭都有许多children表中的孩子。。。 我想从“族”表中选择一些族,并了解所有选定族的子族数。。我试着用手来做这件事 select count (*) from dbo.Children where family_id in (select top 50 percent * from dbo.Fami

我是sql数据库的初学者 我需要一些帮助。。。。我有两个表families\u table和children\u table,它们通过family\u id关联,因此families表中的每个家庭都有许多children表中的孩子。。。 我想从“族”表中选择一些族,并了解所有选定族的子族数。。我试着用手来做这件事

select count (*) from dbo.Children where family_id in (select top 50 percent * from dbo.Families where economic_state = 'a' or economic_state = 'j')
对于此类查询,您可以使用group by和count:

select f.family_id, count(*)
from dbo.Families f
inner join dbo.Children c ON c.family_id = f.family_id
where f.economic_state = 'a' or f.economic_state = 'j'
group by f.family_id
编辑:

如果只需要返回前50%,只需将其添加到上面的查询中即可。当它首先进行连接和计数时,它将从连接结果返回50%:

select top 50 percent f.family_id, count(*)
from dbo.Families f
inner join dbo.Children c ON c.family_id = f.family_id
where f.economic_state = 'a' or f.economic_state = 'j'
group by f.family_id

根据Szymon的答案进行了修改,允许您包括表中的其他列

select *
FROM
    (select f.family_id, count(*) children
    from dbo.Families f
    inner join dbo.Children c ON c.family_id = f.family_id
    where f.economic_state = 'a' or f.economic_state = 'j'
    group by f.family_id) fc
JOIN dbo.Families f ON f.family_id = fc.family_Id
使用联接和分组方式:

SELECT children.fid, families.eco_state, count(children.fid) FROM children, families where children.fid= families.id and families.eco_state = 'a'

按子项分组。fid

您可以使用公共表表达式CTE编写可读性良好的查询

;With CteFamily AS
(
SELECT family_id FROM dbo.Families 
--WHERE --Put your conditions to filter family
),
--get childrens count, with family id for selected family
CteChildrenCount AS
(
 SELECT family_id , Count(*) As ChildrenCount
 FROM  dbo.Children 
 WHERE family_id  IN (SELECT family_id FROM CteFamily)
 GROUP BY family_id 
),
--final query to get all other details from family table
CteFamilyDetails AS
(
  SELECT f.economic_state,f.family_id ,ChildrenCount   --Add extra columns from family       --table here
  FROM dbo.Families f
 INNER JOIN CteChildrenCount  c
 ON f.family_id = c.family_id
)
SELECT * FROM CteFamilyDetails;    --End of Cte end with semicolon.

我不想仅从“族”表中选择族id。。我想从families表中选择50%。您可以在另一个select查询中包装该查询以获取其余信息。我尝试您的代码并将子项计数分配给textbox..但每次返回到textbox的值都是1。。。为什么?你好,Szymon再次感谢你的代码。。但是还有一个问题。。我使用百分比从“族”表中选择族。。你的代码是完美的,但当我使用百分比的程序也返回儿童计数的百分比。。。所以我如何从家庭和所有与家庭相关的孩子中选择百分比。。。我的查询是:选择count*Children c from select top'+int.ParsepercentCb2.Text+'百分比f.family\u id,f.economic\u state from dbo.families f on c.family\u id=f.family\u id,其中f.family\u id=1fq group by fq.family\u id修改了我的答案。另外,不要这样连接查询,应该使用参数来防止SQL注入。