关于SQL Server查询语句向大神

关于SQL Server查询语句向大神求助
关于SQL Server查询语句向大神
有三张表,表结构如图,第一张表为表A,第二张表为B,第三张表为C。表A中userId和表C中userID对应,ModuleId和表B 中id对应,
要求:1.只统计关键模块,2按月统计每一天的访问情况
这个SQL语句该怎么写,有存储过程更好,,,
大神求助啊。。。
------解决思路----------------------
直接仨表连接 group by 月就行

如果月不全 就先用master..spt_values中的number 生成一个月的列
------解决思路----------------------
何为“关键模块”?
------解决思路----------------------
用哪个字段来标识关键模块?
3表连接查询 
而且你的测试数据给得实在是太少了 建议用文本方式给出。
------解决思路----------------------
1#楼的思路可以,而且比我这个好。但现实中许多编程序写代码更倾向于用 游标+临时表。因为那样调整起来方便。
给你一个创建动态时间列,和游标循环的事例,仅做参考
动态时间列
 DECLARE @StartDate CHAR(10)='2014-02-01'
DECLARE @EndDate CHAR(10) ='2014-02-28'
DECLARE @Dates DATETIME = CAST(@StartDate AS DATETIME)
DECLARE @CreateTableSql NVARCHAR(4000)
 
IF OBJECT_ID('tempdb..#Test','U') IS NOT NULL DROP TAbLE #Test
    CREATE TABLE #Test
    (
        DpartID INT
    )
 
    WHILE @Dates<=CAST(@EndDate AS DATETIME)
    BEGIN
        PRINT CONVERT(CHAR(7),@Dates,120)
        SET @CreateTableSql = N'ALTER TABLE #Test ADD ['+CONVERT(varchar(10),@Dates,23)+'] VARCHAR(20) NULL'
    EXEC (@CreateTableSql)
        SET @Dates=DATEADD(day,1,@Dates)
    END
 
SELECT * FROM #Test

游标
if object_id('[TB]') is not null drop table [TB]
create table [TB](ld_P INT,LastName varchar(50),FirstName varchar(50),Address varchar(50),City VARCHAR(50))
insert into [TB]
select 1,'1',NULL,NULL,'bvv' union all
select 2,'4',NULL,NULL,'bvv' union all
select 3,'8',NULL,NULL,'bvv' union all
select 4,'12',NULL,NULL,'bvv' union all
select 5,'22',NULL,NULL,'222'
 
GO
 select * from [TB]
 go
DECLARE @str VARCHAR(50)
 ----------------------开始--------------------
BEGIN TRY
BEGIN TRAN
    DECLARE test  CURSOR   FOR SELECT  LastName FROM dbo.TB
    OPEN test
 FETCH NEXT FROM test INTO @str
 WHILE (@@fetch_status=0)
  BEGIN
    PRINT   @str  --取出LastName给变量
   FETCH NEXT FROM test INTO @str
  END
    CLOSE test
    DEALLOCATE test
COMMIT TRAN
END TRY
BEGIN CATCH
     IF @@TRANCOUNT > 0
            ROLLBACK TRAN
END CATCH
 ---------------------结束--------------------


------解决思路----------------------
这样?

CREATE PROCEDURE P1
    (
     @StartDate DATETIME--'每月1号:2014-01-01'
    ,@ModuleID INT --关健模块ID
    )
AS 
SET nocount ON ;
DECLARE @EndDate DATETIME
SET @EndDate = DATEADD(mm, 1, @StartDate)
SELECT  A.*
       ,b.Name
       ,c.UserName
FROM    A
        INNER JOIN B ON A.ModuleID = b.ID
        INNER JOIN C ON A.UserID = C.UserID
WHERE   a.CreatedDate >= @StartDate
        AND a.CreatedDate < @EndDate
        AND A.ModuleID = @ModuleID