Sql Server:如何跨字段获取聚合统计信息

时间:2016-02-03 18:56:52

标签: sql-server

不确定这里的标题是否正确...

但无论如何,为了简单起见,我有一个包含三个字段的表格,如下所示:

USER_ID         Number_Of_Apples         Number_Of_Pears
ABC1                    1                     NULL
ABC2                    1                     NULL
ABC3                   NULL                    5
ABC4                    1                     12

我想知道是否有办法对各种类型的“不同”查询进行分析,这将为每个字段提供不同级别的数据。所以在上面的例子中,我希望看到类似的东西:

USER_ID      Number_OF_Apples      Number_OF_Pears
   4                2                     3
Number_Of_Apples b / c返回

2我们只在数据集中看到2个可能的值。

我想知道如果你有100个或更多的领域,是否有一种优雅的方式呢?

2 个答案:

答案 0 :(得分:0)

试试这个:

SELECT (SELECT COUNT(DISTINCT USER_ID)
        FROM mytable) AS USER_ID,
       (SELECT COUNT(DISTINCT CASE 
                                 WHEN Number_Of_Apples IS NULL THEN -1  
                                 ELSE Number_Of_Apples
                              END) 
        FROM mytable)   AS Number_Of_Apples                       , 
       (SELECT COUNT(DISTINCT CASE 
                                 WHEN Number_Of_Pears IS NULL THEN -1  
                                 ELSE Number_Of_Pears
                              END) AS Number_Of_Pears
        FROM mytable) AS Number_Of_Pears

上述查询使用CASE表达式来处理NULLNumber_Of_Apples列的Number_Of_Pears值。我已经假设-1不是这两列的可能值。

Demo here

答案 1 :(得分:0)

与您的other question类似,您可以使用合并计算不同,以确保计算空值:

SELECT COUNT(DISTINCT(COALESCE([USER_ID], 'nullitem'))) [USER_ID],
       COUNT(DISTINCT(COALESCE([Number_Of_Apples], 'nullitem'))) [Number_Of_Apples],
       COUNT(DISTINCT(COALESCE([Number_Of_Pears], 'nullitem'))) [Number_Of_Pears]
FROM mytable

只需添加您需要的任何物品。