C# 如何使用位返回类型计算1和0,并在两个单独的列中返回它

C# 如何使用位返回类型计算1和0,并在两个单独的列中返回它,c#,sql,C#,Sql,我希望我的sql查询在一个日期或两个日期之间选择表中的所有字段,数据库中有3个字段的返回类型为bits。这有点像我的数据库 ID||Name || Surname || Age || Country || SumOfInfection || SumOfOtherInfection|| HasPersonContacted SumOfInfection、SumofTheInfection和HasPersonContacted具有位的返回类型。对于这三个领域,我;需要将True1和False0的数

我希望我的sql查询在一个日期或两个日期之间选择表中的所有字段,数据库中有3个字段的返回类型为bits。这有点像我的数据库

ID||Name || Surname || Age || Country || SumOfInfection || SumOfOtherInfection|| HasPersonContacted
SumOfInfection、SumofTheInfection和HasPersonContacted具有位的返回类型。对于这三个领域,我;需要将True1和False0的数字相加到两个单独的列中

姓名| |姓| |||基于用户ID的HasPersonContactedsum为1 | |基于用户ID的HasPersonContactedsum为0。。。。。 那么我在寻找什么呢

SumOfInfection <- all the 1's for that ID
output= 10 <- so the person had 10 infection
SumOfInfection <- all the 0's for that ID
output= 3 - so the person had no infection for 3 times
我想为感染和接触过的人做同样的事情

这就是我所做的,但它只显示了感染的总和。我如何一次性获得所有这些数据?我喜欢使用Select*,因为将来如果我要查找更多数据,就不必重写查询

SELECT COUNT(NULLIF(SumOfInfection,1)) 
From [TableName] 
where ID='1234' AND Cast([Time] AS DATE) >'2012-01-09' AND CAST([Time] AS DATE) < '2014-01-01' 
尝试使用条件和:

编辑:

我认为完整的查询更像:

select Name, Surname,
       sum(case when HasPersonContacted = 1 then 1 else 0 end) as NumPersonContacted1,
       sum(case when HasPersonContacted = 0 then 1 else 0 end) as NumPersonContacted0,
       . . .
from t
group by Name, Surname;

不清楚你在问什么。您的意思是当SumOfInfection、SumofTheInfection和HasPersonContacted的值为1时,您想返回3吗?那么,像感染之和+感染之和+接触者之和这样的东西有什么问题吗?是的,这就是我需要的。现在,我如何获得一个人的名字、姓氏等…?我得到一个错误,在关键字“where”附近说了不正确的语法,所以之前我从表中添加了日期。如果我在没有日期的情况下运行查询,那么在关键字“From”@Dip附近会出现语法错误的错误。如果非要我猜的话,在select.it中最后一行的末尾有一个逗号。我可以在我的内部联接表中添加此计算吗。所以我从一个表中得到fname和sname,从第二个表中得到其他字段,所以我的查询看起来是:selectname,sname等等。。。。从table1.ID=table1.ID上的tablename内部联接table1字段。如何在内部实现0和1的计算JOIN@Dip . . . 以相同的方式或在from子句中使用子查询。如果你有一个特别的问题,你可能想问另一个问题。
SELECT sum(cast(SumOfInfection as int)) as NumInfection1,
       sum(1 - cast(SumOfInfection as int)) as NumInfection1
select Name, Surname,
       sum(case when HasPersonContacted = 1 then 1 else 0 end) as NumPersonContacted1,
       sum(case when HasPersonContacted = 0 then 1 else 0 end) as NumPersonContacted0,
       . . .
from t
group by Name, Surname;