如何在SQL Server中创建分组日报表、周报表和月报表,包括计算字段



我使用SQL Server(2012),并使用下面的两个(简化)表,我如何创建3个独立的报告(每日,每周和每月),并包括以下计算字段:

1. new users created in this period
2. total number of users at this time

**Users**
userID          int
name            varchar(80)
userCreated     datetime

**Orders**
orderID         int
userID          int
orderCreated    datetime

我一直在摆弄这段代码:

SELECT CAST(DATEPART(dd,userCreated) as VARCHAR(2)) + '/' + CAST(DATEPART(mm,userCreated) AS VARCHAR(2)) + '/' + CAST(DATEPART(yyyy,userCreated) AS VARCHAR(4)) [Date],
    count(*) newSignUps,
    (select count(*) from users u2 WHERE u2.userCreated < u1.userCreated)
FROM users u1
WHERE userCreated BETWEEN '05/01/2014 00:00:00.000' and '05/31/2014 23:59:59.000'
GROUP BY DATEPART(dd,userCreated), DATEPART(mm,userCreated), DATEPART(yyyy,userCreated),userCreated

但是为了显示任何内容,它需要将"userCreated"字段添加到分组中…

对于我需要显示的报告:

日常:

date          new sign ups        users in system
17/03/2013    10                  100
18/03/2013    4                   104
19/03/2013    8                   112
每周:

week
13             8                   40
14             2                   42
15             5                   47
每月

:

Jan            3                   54
Feb            9                   63
Mar            2                   65

我希望这是有意义的?谢谢你…

我不确定我是否正确理解了你的问题,但这给了你每天创建的所有用户:

SELECT year(userCreated), month(userCreated), day(userCreated), count(*)
FROM Users
GROUP BY year(userCreated), month(userCreated), day(userCreated)

this one by month:

SELECT year(userCreated), month(userCreated), count(*)
FROM Users
GROUP BY year(userCreated), month(userCreated)

和这个按周:

SELECT year(userCreated), datepart(week, userCreated), count(*)
FROM Users
GROUP BY year(userCreated), datepart(week, userCreated)

根据您缺少的total字段编辑我在这里给您的月查询示例:

SELECT year(userCreated), month(userCreated), count(*) AS NewCount,
(SELECT COUNT(*) FROM Users u2 WHERE 
    CAST(CAST(year(u1.userCreated) AS VARCHAR(4)) + RIGHT('0' + CAST(month(u1.userCreated) AS VARCHAR(2)), 2) + '01' AS DATETIME) > u2.userCreated) AS TotalCount
FROM Users u1
GROUP BY year(userCreated), month(userCreated)

希望这对其他两个查询有帮助。

DAILY

select count(UserId),userCreated     
from User WHERE CONDITION group by CreatedOn
每月

select count(UserId),
LEFT(CONVERT(varchar, userCreated ,112),6) from User 
WHERE CONDITION  group by LEFT(CONVERT(varchar, userCreated ,112),6) 

select count(UserId),
month(userCreated ) 
from User group by month(userCreated ) 
每周

select count(UserId),
DATEPART( wk, userCreated) 
from User WHERE CONDITION  group by DATEPART( wk, userCreated     ) 

对于新用户和现有用户计数(每月)

select new,
(select count(UserId) from User where month(userCreated)<=monthwise) as total,
monthwise
FROM (
select count(UserId) as new,
month(userCreated)as monthwise from User group by month(userCreated) 
)tmp

最新更新