SQL Server显示一列中的不同值,并计算每个不同的条目数

时间:2016-12-05 16:22:15

标签: sql-server

我试图显示A列中的每个唯一值,并计算每个值出现的频率,忽略B列中值为null的位置

Column A     Column B
1              56
1              null
1              78
2              null
3              54

我想要一个看起来像

的回报
1    2
3    1

1 个答案:

答案 0 :(得分:1)

您应该在ColumnA上使用GROUP BY,并选择ColumnB不为NULL的那些记录。以下脚本完成了您的请求,之后我已经包含了一些解释

CREATE TABLE Test(ColumnA INT, ColumnB INT)

INSERT INTO Test(ColumnA, ColumnB) VALUES (1, 56),
                                          (1, null),
                                          (1, 78),
                                          (2, null),
                                          (3, 54)

SELECT ColumnA, COUNT(*)
FROM TEST WHERE ColumnB IS NOT NULL
GROUP BY ColumnA

DROP TABLE Test

感兴趣的部分是SELECT指令。脚本的其余部分仅用于创建和填充简单的表,就像您正在谈论的那样。

请注意SELECT是在ColumnA上进行的,该列也用于GROUP BY子句。这意味着我们想从ColumnA中提取单个值,以便选择其他列,以某种方式聚合它们。

特定聚合,即ColumnB值的出现,由聚合函数COUNT()产生,它告诉我们提取与分组列匹配的那些记录的数量。在我们的例子中,COUNT()计算ColumnA的每个值的记录量。 但是由于你想要排除那些具有NULLB值的记录,我们只是通过WHERE子句将它们从选择中排除:正如你所看到的,我要求那些ColumnB IS NOT NULL的记录。

这样,使用您发布的样本数据,我们将准确获得您的预期:

1    2
3    1