求一个sql语句,关于统计的功能。

baiduu 2013-09-04 02:54:23
orderid province time
13359 北京 2013/08/02
14327 北京 2013/07/16
19284 北京 2013/06/02
13342 广东 2013/06/04
12332 四川 2013/05/03
23333 四川 2013/04/02
......
......


现在想按月份统计一下各个省份的订单量,生成类似于下面这样的表格:


北京 上海 广东 四川 吉林 广西 山西 ......
2013/04 19 25 30 20 11 12 13 ......
2013/05 18 ......
2013/06 16 ......
......


求教SQL语句,谢谢。

...全文
144 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Andy__Huang 2013-09-11
  • 打赏
  • 举报
回复
经典例子总结:http://bbs.csdn.net/topics/240002706
呆呆和笨笨 2013-09-11
  • 打赏
  • 举报
回复

declare @strsql varchar(max)
select @strsql='';
select @strsql='select time '
select @strsql=@strsql+',(select COUNT(*) from #a1 where left(convert(varchar(10),time,120),7)=A.time and province='''+province+''') '+province from #a1 group by province
select @strsql=@strsql+' from(select time= left(CONVERT(varchar(10),time,120),7) from #a1 group by left(CONVERT(varchar(10),time,120),7) ) A'
exec(@strsql)
lzw_0736 2013-09-09
  • 打赏
  • 举报
回复

WITH a1 (orderid,province,TIME) AS
(
SELECT 13359,'北京','2013/08/02' UNION ALL
SELECT 14327,'北京','2013/07/16' UNION ALL
SELECT 19284,'北京','2013/06/02' UNION ALL
SELECT 19284,'北京','2013/06/03' UNION ALL
SELECT 13342,'广东','2013/06/04' UNION ALL
SELECT 12332,'四川','2013/05/03' UNION ALL
SELECT 23333,'四川','2013/04/02'
)
SELECT * INTO #temp FROM a1
 
DECLARE @sql VARCHAR(MAX), @colList VARCHAR(MAX)
SET @colList = STUFF(
(
    SELECT ','+QUOTENAME(province) 
    FROM (SELECT DISTINCT province FROM #temp) t
    FOR XML PATH('')
),1,1,'')
SET @sql = '
    select * 
    from (select CONVERT(char(7),TIME,120) time,province,1 n from #temp) a
    pivot
    (sum(n) for province in('+ @colList +')) b'
  
EXEC(@sql)
baiduu 2013-09-09
  • 打赏
  • 举报
回复
谢谢亲,不过亲你的代码好像不是按月份统计的。
lzw_0736 2013-09-04
  • 打赏
  • 举报
回复

WITH a1 (orderid,province,TIME) AS
(
SELECT 13359,'北京','2013/08/02' UNION ALL
SELECT 14327,'北京','2013/07/16' UNION ALL
SELECT 19284,'北京','2013/06/02' UNION ALL
SELECT 13342,'广东','2013/06/04' UNION ALL
SELECT 12332,'四川','2013/05/03' UNION ALL
SELECT 23333,'四川','2013/04/02'
)
SELECT * INTO #temp FROM a1

DECLARE @sql VARCHAR(MAX), @colList VARCHAR(MAX)
SET @colList = STUFF(
(
    SELECT ','+QUOTENAME(province) 
    FROM (SELECT DISTINCT province FROM #temp) t
    FOR XML PATH('')
),1,1,'')
SET @sql = '
    select * 
    from (select TIME,province,1 n from #temp) a
    pivot
    (sum(n) for province in('+ @colList +')) b'
 
EXEC(@sql)
baiduu 2013-09-04
  • 打赏
  • 举报
回复
行列转换,我去搜一下。
--小F-- 2013-09-04
  • 打赏
  • 举报
回复
又见到了行列转换了。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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