更新内部查询结果

时间:2014-11-12 07:08:53

标签: mysql sql sql-server sql-server-2008 tsql

我有一个查询和结果如下 在数据库中,NULL和0表示相同的含义 现在我想要一个基于Null + 0或1

的计数器

例如:在以下示例中,我希望得到如下结果:

IsVirtual   Category    counter
NULL+0      3           343+8 = (351 is Total)

查询

select * from 
(
    Select IsVirtual, Category, count(*) as counter
    from [Hardware]
    group by IsVirtual, Category
) innercat

输出

+-----------+----------+---------+
| IsVirtual | Category | counter |
+-----------+----------+---------+
| NULL      |  3       |    343  |
| 0         |  3       |    8    |
| 1         |  2       |    1    |
| 0         |  1       |    1    |
| NULL      |  6       |    119  |
| 0         |  4       |    1    |
| NULL      |  1       |    70   |
| 0         |  5       |    9    |
| NULL      |  4       |    54   |
| 0         |  2       |    2    |
| NULL      |  5       |    41   |
| NULL      |  2       |    112  |
| 1         |  1       |    5    |
+-----------+----------+---------+

3 个答案:

答案 0 :(得分:1)

我想你想要这个:

SELECT COALESCE(IsVirtual, 0) as [IsVirtual],
       Category,
       Count(*) as [Counter]
FROM   yourtable
GROUP  BY COALESCE(IsVirtual, 0),Category  

这将在不使用子查询的情况下为您提供预期的结果。

答案 1 :(得分:0)

试试这个

select * from (

Select CASE ISNULL(IsVirtual,0)
WHEN 0 Then 'NULL + 0'
ELSE IsVirtual
END AS IsVirtual, Category, count(*) as counter from [Hardware] group by ISNULL(IsVirtual,0), Category

)innercat

答案 2 :(得分:0)

您也可以使用MAX功能

执行相同的操作

这可能会对你有帮助。

SELECT 
       max(IsVirtual) as IsVirtual,
       Category,
       Count(*) as Counter
FROM   
       yourtable
GROUP  BY 
       Category