新手提问:如何在一张表中按不同条件进行不含重复行数的统计?
如何写下面情况下的sql语句
表a
编号 名称 标志 日期
0001 李 0 2007-01-01
0002 李 0 2007-01-10
0001 李 0 2007-01-11
0001 刘 0 2007-01-16
0008 李 0 2007-01-08
0003 王 1 2007-01-06
0003 王 0 2007-01-10
0003 王 1 2007-01-10
0004 刘 1 2007-01-10
0005 李 1 2007-01-09
0005 李 1 2007-01-10
要求按名称统计出:当时间为2007-01-01至2007-01-15标志等于0时编号不含重复行数和按名称当时间为2007-01-06至2007-01-10标志等于1时编号不含重复行数,即得出如下结果:
名称 标志(为0) 标志(为1)
李 3 1
王 1 1
刘 0 1
“猪”各位前辈, 猪年快乐!
------解决方案--------------------select 编号,名称,sum(case when 日期 between '2007-01-01 ' and '2007-01-15 ' and 标志=0 then 1 else 0 end) '标志(为0) ' ,sum(case when 日期 between '2007-01-06 ' and '2007-01-10 ' and 标志=1 then 1 else 0 end ) '标志(为1) '
from tb
group by 编号,名称
------解决方案--------------------declare @a table(编号 varchar(10), 名称 varchar(10), 标志 varchar(10), 日期 smalldatetime)
insert @a select '0001 ', '李 ', '0 ', '2007-01-01 '
union all select '0002 ', '李 ', '0 ', '2007-01-10 '
union all select '0001 ', '李 ', '0 ', '2007-01-11 '
union all select '0001 ', '刘 ', '0 ', '2007-01-16 '
union all select '0008 ', '李 ', '0 ', '2007-01-08 '
union all select '0003 ', '王 ', '1 ', '2007-01-06 '
union all select '0003 ', '王 ', '0 ', '2007-01-10 '
union all select '0003 ', '王 ', '1 ', '2007-01-10 '
union all select '0004 ', '刘 ', '1 ', '2007-01-10 '
union all select '0005 ', '李 ', '1 ', '2007-01-09 '
union all select '0005 ', '李 ', '1