表S有三个字段:
A B C
----------------
1 a null
2 a 100
3 a 200
4 b 100
5 a null
6 a 300要按C实现分组统计count数(只区分null和not null,即所有not null的要统计到一起)
结果为
B count(c)
---------------
a 2 (null)
a 3 (不为null的数目,有100,200,300三个)
b 1谢谢。
A B C
----------------
1 a null
2 a 100
3 a 200
4 b 100
5 a null
6 a 300要按C实现分组统计count数(只区分null和not null,即所有not null的要统计到一起)
结果为
B count(c)
---------------
a 2 (null)
a 3 (不为null的数目,有100,200,300三个)
b 1谢谢。
-- Author :SQL77(只为思齐老)
-- Date :2010-03-29 09:03:18
-- Version:
-- Microsoft SQL Server 2000 - 8.00.2039 (Intel X86)
-- May 3 2005 23:18:38
-- Copyright (c) 1988-2003 Microsoft Corporation
-- Desktop Engine on Windows NT 5.1 (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:#TB
if object_id('tempdb.dbo.#TB') is not null drop table #TB
go
create table #TB([A] int,[B] varchar(1),[C] int)
insert #TB
select 1,'a',null union all
select 2,'a',100 union all
select 3,'a',200 union all
select 4,'b',100 union all
select 5,'a',null union all
select 6,'a',300
--------------开始查询--------------------------select B,COUNT(1)NUM from #TB WHERE C IS NULL GROUP BY B
UNION ALLselect B,COUNT(C) NUM from #TB GROUP BY B
----------------结果----------------------------
/* (所影响的行数为 6 行)B NUM
---- -----------
a 2
a 3
b 1(所影响的行数为 3 行)警告: 聚合或其它 SET 操作消除了空值。*/
--> Author : wufeng4552
--> Date : 2010-03-29 09:03:15
if not object_id('tb') is null
drop table tb
Go
Create table tb([A] int,[B] nvarchar(1),[C] int)
Insert tb
select 1,N'a',null union all
select 2,N'a',100 union all
select 3,N'a',200 union all
select 4,N'b',100 union all
select 5,N'a',null union all
select 6,N'a',300
Go
select b,
ltrim(count(*))[count]
from tb
where c is not null
group by b
union all
select b,
ltrim(count(*))+'(null)'[count]
from tb
where c is null
group by b
/*
b count
---- ------------------
a 3
b 1
a 2(null)(3 個資料列受到影響)*/
-- Author : htl258(Tony)
-- Date : 2010-03-29 09:03:03
-- Version:Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (Intel X86)
-- Mar 29 2009 10:27:29
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 2)
--------------------------------------------------------------------------
--> 生成测试数据表:tbIF NOT OBJECT_ID('[tb]') IS NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb]([A] INT,[B] NVARCHAR(10),[C] INT)
INSERT [tb]
SELECT 1,'a',NULL UNION ALL
SELECT 2,'a',100 UNION ALL
SELECT 3,'a',200 UNION ALL
SELECT 4,'b',100 UNION ALL
SELECT 5,'a',NULL UNION ALL
SELECT 6,'a',300
GO
--SELECT * FROM [tb]-->SQL查询如下:
SELECT B,COUNT(CASE WHEN C IS NULL THEN 'A' ELSE 'B' END) [COUNT]
FROM tb
GROUP BY B,CASE WHEN C IS NULL THEN 'A' ELSE 'B' END
/*
B COUNT
---------- -----------
a 2
a 3
b 1(3 行受影响)
*/
-- Author :fredrickhu(小F,向高手学习)
-- Date :2010-03-29 09:06:02
-- Verstion:
-- Microsoft SQL Server 2005 - 9.00.4053.00 (Intel X86)
-- May 26 2009 14:24:20
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([A] int,[B] varchar(1),[C] int)
insert [tb]
select 1,'a',null union all
select 2,'a',100 union all
select 3,'a',200 union all
select 4,'b',100 union all
select 5,'a',null union all
select 6,'a',300
--------------开始查询--------------------------
select b,count(1) as num from [tb] where c is null group by b
union all
select b,count(1) as num from [tb] where c is not null group by b
----------------结果----------------------------
/* b num
---- -----------
a 2
a 3
b 1(3 行受影响)
*/
if object_id('[TB]') is not null drop table [TB]
create table [TB]([A] int,[B] varchar(1),[C] int)
insert [TB]
select 1,'a',null union all
select 2,'a',100 union all
select 3,'a',200 union all
select 4,'b',100 union all
select 5,'a',null union all
select 6,'a',300select B,num=count(1) from [TB]
group by 0/C,B/*
B num
---- -----------
a 2
a 3
b 1(3 行受影响)*/
drop table TB
DROP TABLE [tb]
GO
CREATE TABLE [tb]([A] INT,[B] NVARCHAR(10),[C] INT)
INSERT [tb]
SELECT 1,'a',NULL UNION ALL
SELECT 2,'a',100 UNION ALL
SELECT 3,'a',200 UNION ALL
SELECT 4,'b',100 UNION ALL
SELECT 5,'a',NULL UNION ALL
SELECT 6,'a',300 UNION ALL
SELECT 6,'a',0
GO
--SELECT * FROM [tb]-->SQL查询如下:
SELECT B,COUNT(1) [COUNT]
FROM tb
GROUP BY B,C*0
/*
B COUNT
---------- -----------
a 2
a 3
b 1(3 行受影响)
*/
select b,count(*) from #tb group by b,case when c is null then 1 else 0 end order by b
insert into @s select 1,'a',null
union all select 2,'a',100
union all select 3,'a',200
union all select 4,'b',100
union all select 5,'a',null
union all select 6,'a',300
select b,[count(c)]= count(*) from
(select *,px=dense_rank()over(order by case when c is null then 1 else 0 end) from @s) tb
group by b,px order by bb count(c)
---------- -----------
a 3
a 2
b 1(3 行受影响)