菜鸟高分求教日期分组查询SQL写法~~~在线等

xiyiren 2015-05-22 09:09:10
数据表如下:

编号 日期            姓名   客户数     
1 2015-05-18 00:00:00.000 张三 30
2 2015-05-18 00:00:00.000 李四 2
3 2015-05-18 00:00:00.000 王五 10
4 2015-05-22 00:00:00.000 张三 30
5 2015-05-22 00:00:00.000 李四 2
6 2015-05-22 00:00:00.000 王五 10


要求按时间段统计,比如2015-05-10到2015-05-30
输出结果是:
姓名 2015-05-18 2015-05-22
张三 30 30
李四 2 2
王五 10 10
...全文
80 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
习惯性蹭分 2015-05-22
  • 打赏
  • 举报
回复


use tempdb
create table tab(编号 int identity(1,1),日期 date,姓名 Nvarchar(100),客户数 int)
insert into tab
select '2015-05-18 00:00:00.000',           '张三',             30  union all
select '2015-05-18 00:00:00.000',           '李四',              2 union all
select '2015-05-18 00:00:00.000',           '王五',             10  union all
select '2015-05-22 00:00:00.000',           '张三',              30 union all
select '2015-05-22 00:00:00.000',           '李四',               2 union all
select '2015-05-22 00:00:00.000',           '王五',             10 

go
declare @sql Nvarchar(max)
select @sql=isnull(@sql+',','')+QUOTENAME(convert(varchar(10),日期,120),']')
from tab
where 日期 between '20150510' and '20150530'
group by convert(varchar(10),日期,120)
set @sql='select *
from (select convert(varchar(10),日期,120) 日期,姓名,客户数 from tab) 
a pivot (sum(客户数) for 日期 in('+@sql+'))p'
  --print @sql
exec(@sql)
 
还在加载中灬 2015-05-22
  • 打赏
  • 举报
回复
--动态
DECLARE @SQL VARCHAR(8000)
SET @SQL='SELECT 姓名'
SELECT @SQL=@SQL+',SUM(CASE WHEN CONVERT(VARCHAR(10),日期,120)='''+日期+''' THEN 客户数 END)['+日期+']'
FROM(SELECT CONVERT(VARCHAR(10),日期,120)日期 FROM TB GROUP BY CONVERT(VARCHAR(10),日期,120))T
ORDER BY 日期
SET @SQL=@SQL+' FROM TB GROUP BY 姓名'
PRINT @SQL
EXEC(@SQL)
--静态
SELECT 姓名
	,SUM(CASE WHEN CONVERT(VARCHAR(10),日期,120)='2015-05-18' THEN 客户数 END)[2015-05-18]
	,SUM(CASE WHEN CONVERT(VARCHAR(10),日期,120)='2015-05-22' THEN 客户数 END)[2015-05-22]
FROM TB
GROUP BY 姓名
Neo_whl 2015-05-22
  • 打赏
  • 举报
回复

with cte(编号,日期,姓名,客户数)
as
(
 select 1,'2015-05-18 00:00:00.000',N'张三',30 union all
 select 2,'2015-05-18 00:00:00.000',N'李四',2 union all
 select 3,'2015-05-18 00:00:00.000',N'王五',10 union all	
 select 4,'2015-05-22 00:00:00.000',N'张三',30 union all
 select 5,'2015-05-22 00:00:00.000',N'李四',2 union all
 select 6,'2015-05-22 00:00:00.000',N'王五',10	
)
select 姓名,sum(case when convert(varchar(10),日期)='2015-05-18' then 客户数 end) as [2015-05-18],sum(case when convert(varchar(10),日期)='2015-05-22' then 客户数 end) as [2015-05-22] from cte
group by 姓名

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧