日期:2014-05-18  浏览次数:20613 次

求句简单SQL,先谢谢了,明早来结帖
如下两个字段,第二个字段是月份(如果比如02月份没有数据,Month里即没有02),现数据如下:

Field1       Month
A                 01
A                 03
B                 04
C                 05
B                 07
.                 .
.                 .
C                 12    

现按月分组group   by   Month   ,计算每个月A.B..C的总数,要求结果是这样的
Count(Field)     Month
10                           01
0                             02
44                           03
22                           04
33                           05
.                               .
xx                           12
月份连续的,如果02月没有数据,即显示0条


下面SQL语句我写的显然是不对的

select   count(Field1),Month   group   by   Month   order   by   Month


汗,说了半天不知我表达清楚没有。

------解决方案--------------------
create table A(Field1 varchar(10),[Month] char(2))
insert into A values( 'A ', '01 ')
insert into A values( 'A ', '03 ')
insert into A values( 'B ', '04 ')
insert into A values( 'C ', '05 ')
insert into A values( 'B ', '07 ')
insert into A values( 'C ', '12 ')
create table B([month] char(2))
insert into B values( '01 ')
insert into B values( '02 ')
insert into B values( '03 ')
insert into B values( '04 ')
insert into B values( '05 ')
insert into B values( '06 ')
insert into B values( '07 ')
insert into B values( '08 ')
insert into B values( '09 ')
insert into B values( '10 ')
insert into B values( '11 ')
insert into B values( '12 ')
go

select b.[month],isnull(t.counts,0) counts from b
left join
(select [month] , count(*) counts from a group by [month]) t
on b.[month] = t.[month]
drop table a,b

/*
month counts
----- -----------
01 1
02 0
03 1
04 1
05 1
06 0
07 1
08 0
09 0
10 0
11 0
12 1

(所影响的行数为 12 行)
*/
------解决方案--------------------
/*** 测试:Limpire ***/

--定义表变量:@Test
declare @Test table(Field1 varchar(1),Month varchar(2))
insert @Test
select 'A ', '01 ' union all
select 'A ', '03 ' union all
select 'B ', '04 ' union all
select 'C ', '05 ' union all
select 'B ', '07 ' union all
select &