2012-03-08 74 views
0

我想打一个表像下计算已经没有空值列

| ID | Sibling1 | Sibling2 | Sibling 3 | Total_Siblings | 
______________________________________________________________ 
| 1 | Tom  | Lisa | Null  |  2  | 
______________________________________________________________ 
| 2 | Bart | Jason | Nelson |  3  | 
______________________________________________________________ 
| 3 | George | Null | Null  |  1  | 
______________________________________________________________ 
| 4 | Null | Null | Null  |  0  | 

对于Sibling1,Sibling2,Sibling3数:他们都是为nvarchar(50)(不能更改此作为需求)。

我的问题是,我如何计算Total_Siblings的值,以便使用SQL显示上述兄弟的数量?我试图使用(Sibling1 +兄弟2),但它不显示我想要的结果。

干杯

回答

1

像这样的查询将做的伎俩。

SELECT ID,Sibling1,Sibling2,Sibling3 
,COUNT(Sibling1)+Count(Sibling2)+Count(Sibling3) AS Total 
FROM MyTable 
GROUP BY ID 

一点解释可能是在这里需要。用字段名称计数将计算非空值的数量。既然你是ID分组,这将只返回0或1。现在,如果你使用MySQL之外任何东西,你必须替代

GROUP BY ID 

FOR

GROUP BY ID,Sibling1,Sibling2,Sibling3 

因为大多数其他数据库都要求您指定GROUP BY部分中不包含聚合函数的所有列。另外,您也可以考虑更改数据库模式以将兄弟姐妹存储在另一个表中,以便每个人都可以拥有任意数量的兄弟姐妹。

+0

精彩,非常简单的理解,正是我期待的 – 2012-03-08 00:35:11

0

您可以通过添加了个人count就做这样的:

select id,sibling1,sibling2,sibling3 
,count(sibling1)+count(sibling2)+count(sibling3) as total_siblings 
from table 
group by 1,2,3,4; 

然而,你的表结构,使这个规模crappily(如果id可以属于什么,比方说,50个兄弟姐妹?)。如果您的数据存储到与idsibling列的表,那么这个查询会这么简单:

select id,count(sibling) 
from table 
group by id;