use*_*816 1 sql sql-server-2008
我正在尝试每周获取报告,以了解有多少人实际使用该产品的状态.
这是我目前的查询
select
COUNT(*) as 'TotalPurchased',
SUM(case when date<= DATEADD(day, -7, GETDATE())THEN 1 ELSE 0 END) as 'week1'
from #myreport
Run Code Online (Sandbox Code Playgroud)
我希望输出为
Totalpurchased week1 week2 week3 ..........so on
82 80 14 16
Run Code Online (Sandbox Code Playgroud)
它应该到年底.
我从上面的查询中获得输出仅一周.我正在使用sql 2008 r2环境从临时表中获取数据.
您可以使用动态sql,PIVOT如果您一直想要返回列,请执行此操作:
DECLARE @cols AS VARCHAR(8000),
@query AS VARCHAR(8000)
SELECT @cols = STUFF((SELECT ',' + QUOTENAME(YrWeek)
FROM (SELECT DISTINCT CAST(YEAR(rpt_dt)AS VARCHAR(4)) + '-' + CAST(DATEPART(week,rpt_dt)AS VARCHAR(2))'YrWeek'
FROM #myreport
WHERE rpt_dt > DATEADD(YEAR,-1,GETDATE()))sub
ORDER BY LEFT(YrWeek,4) DESC,RIGHT(YrWeek,2)DESC
FOR XML PATH(''), TYPE
).value('.', 'VARCHAR(MAX)')
,1,1,'')
SET @query = 'SELECT * FROM
(
SELECT CAST(YEAR(rpt_dt)AS VARCHAR(4)) + ''-'' + CAST(DATEPART(week,rpt_dt)AS VARCHAR(2)) YrWeek, COUNT(*)CT
FROM #myreport
GROUP BY CAST(YEAR(rpt_dt)AS VARCHAR(4)) + ''-'' + CAST(DATEPART(week,rpt_dt)AS VARCHAR(2))
) AS T1
PIVOT (SUM(CT) FOR YrWeek IN ('+@cols+')) AS T2
'
EXEC(@query)
Run Code Online (Sandbox Code Playgroud)
在这个例子中,从去年开始,它在去年每周都在拉动.
这是一个演示,只使用日期列表并记录该日期的记录,我认为这与您最终要做的事情相同.
| 归档时间: |
|
| 查看次数: |
3769 次 |
| 最近记录: |