再问〈求一个sql语句写法〉
A表:
cardtypeid,date_time
1 2007/02/03
2 2007/03/03
3 2007/04/03
2 2007/04/03
B表:
cardtypeid, cardtypeName
1 甲
2 乙
3 丙
查询结果:
一, 按照月份统计
月份 甲 乙 丙 合计
2007/02 1 0 0 1
2007/03 0 1 0 1
2007/04 0 1 1 2
合计 1 2 1 4
二,按照日期统计
日期 甲 乙 丙 合计
2007/02/03 1 0 0 1
2007/03/03 0 1 0 1
2007/04/03 0 1 1 2
合计 1 2 1 4
三,按照星期统计(2007/02/03和2007/03/03都是星期二,2007/04/03是星期六)
星期 甲 乙 丙 合计
星期二 1 1 0 2
星期六 0 1 1 2
合计
潇洒老乌龟大哥的写法如下,
但是我想成存储过程在前端调用时
会报错,“拒绝了对对象.....的select 权限”,
这个时候就必须在数据库安全设置里对此用户设置“db_owner”的权限。
有没有其他的写法可以避免此情况?(不带exec(@sql)命令的)
————————————————————————————————————
declare @sql varchar(8000)
set @sql = 'select isnull(月份,''合计'') 月份'
select @sql = @sql + ' , sum(case cardtypeName when ''' + cardtypeName + ''' then 1 else 0 end) [' + cardtypeName + ']'
from (select distinct cardtypeName from (select a.cardtypeid , convert(varchar(7),a.date_time,120) 月份 , b.cardtypeName from A,B where a.cardtypeid = b.cardtypeid) t) as m
set @sql = @sql + ' ,count(*) as 合计 from (select a.cardtypeid , convert(varchar(7),a.date_time,120) 月份 , b.cardtypeName from A,B where a.cardtypeid = b.cardtypeid) t group by 月份 with rollup'
exec(@sql)