请教大家 这个查询SQL如何写
我有2个表,第一个表基础信息表,info
id name(姓名) age(年龄)
1 张三 18
2 李四 20
3 王五 19
第二表是记录系统登录时间表 signtime
id mid dtime(登录时间)
1 1 2015-01-10
2 3 2015 -02 -11
3 2 2015 -03 -09
4 1 2015-01-12
5 1 2015-04-05
想要得到这样的结果集
id 姓名 年龄 一月登录次数 二月登录次数 三月登录次数 四登录次数 。。。。。十二月登录次数
1 张三 18 2 1
2 李四 20 1
3 王五 19 1
可根据年条件得不同 得到不同年的结果集
------解决思路----------------------
CREATE TABLE #signtime(
mid int
, dtime varchar(100)
)
INSERT INTO #signtime
SELECT 1,'2015-01-10'
UNION
SELECT 3,'2015-02-11'
UNION
SELECT 2,'2015-03-09'
UNION
SELECT 1,'2015-01-12'
UNION
SELECT 1,'2015-04-05'
CREATE TABLE #info(
id int
, name varchar(10)
, age int
)
INSERT INTO #info
SELECT 1,'张三',18
UNION
SELECT 2,'李四',20
UNION
SELECT 3,'王五' ,19
--select * from #signtime
declare @sql varchar(max)
set @sql=''
select @sql=@sql + ',['+rtrim(left(dtime,7))+']=sum(case left(dtime,7) when '''+rtrim(left(dtime,7))+''' then 1 else 0 end)'
from #signtime group by left(dtime,7)
exec('select b.id,b.name, b.age'+@sql+'from #signtime a,#info b
where a.mid=b.id group by b.id,b.name, b.age' )
DROP TABLE #signtime
DROP TABLE #info
/*
(5 行受影响)
(3 行受影响)
id name age 2015-01 2015-02 2015-03 2015-04
----------- ---------- ----------- ----------- ----------- ----------- -----------
1 张三 18 2 0 0 1
2 李四 20 0 0 1 0
3 王五 19 0 1 0 0
(3 行受影响)
*/
declare @sql varchar(max)
set @sql=''
select @sql=@sql + ',['+rtrim(left(dtime,7))+']=sum(case left(dtime,7) when '''+rtrim(left(dtime,7))+''' then 1 else 0 end)'
from #signtime group by left(dtime,7)
exec('select b.id,b.name, b.age'+@sql+'from #signtime a,#info b
where a.mid=b.id group by b.id,b.name, b.age' )
这些是主要代码,您把我的临时表的#去掉,就是您的真实表。