Sql 这两个日期之间的天数是365天,即7×52+1,您是否需要一个不完整的(1天)周(可能是week53),或者应该将范围调整为364天(正好是52个完整周)?@OzrenTkalčecKrznarić动态透视查询并不是最简单的,但我不认为有一个更简单的查询可
Sql 这两个日期之间的天数是365天,即7×52+1,您是否需要一个不完整的(1天)周(可能是week53),或者应该将范围调整为364天(正好是52个完整周)?@OzrenTkalčecKrznarić动态透视查询并不是最简单的,但我不认为有一个更简单的查询可,sql,sql-server-2008,Sql,Sql Server 2008,这两个日期之间的天数是365天,即7×52+1,您是否需要一个不完整的(1天)周(可能是week53),或者应该将范围调整为364天(正好是52个完整周)?@OzrenTkalčecKrznarić动态透视查询并不是最简单的,但我不认为有一个更简单的查询可以产生所需的输出。@OzrenTkalčecKrznarić不幸的是,如果OP想要返回未知数量的列,必须使用动态SQL来完成,这是正确的方法that@OzrenTkalčecKrznarić动态透视查询并不是最简单的,但我不认为有一个更简单的查
这两个日期之间的天数是365天,即7×52+1,您是否需要一个不完整的(1天)周(可能是
week53
),或者应该将范围调整为364天(正好是52个完整周)?@OzrenTkalčecKrznarić动态透视查询并不是最简单的,但我不认为有一个更简单的查询可以产生所需的输出。@OzrenTkalčecKrznarić不幸的是,如果OP想要返回未知数量的列,必须使用动态SQL来完成,这是正确的方法that@OzrenTkalčecKrznarić动态透视查询并不是最简单的,但我不认为有一个更简单的查询可以产生所需的输出。@OzrenTkalčecKrznarić不幸的是,如果OP想要返回未知数量的列,必须使用动态SQL来完成,这是正确的方法that@downvoters:否决一个正确的,记录在案的、有效的、没有评论的回答可能是无知或恶意的表现。请随意争论这里的错误。@downvorters:在没有评论的情况下否决一个正确的、有记录的、有效的答案可能是无知或恶意的表现。请随意讨论这里的问题。
select
COUNT(*) as 'TotalPurchased',
SUM(case when date<= DATEADD(day, -7, GETDATE())THEN 1 ELSE 0 END) as 'week1'
from #myreport
Totalpurchased week1 week2 week3 ..........so on
82 80 14 16
SELECT
COUNT(*) AS 'count',
CONVERT(nchar(4), DATEPART(year, [date]))
+ '-' +
CONVERT(nchar(2), DATEPART(wk, [date])) AS 'week'
FROM #myreport
WHERE
[date] BETWEEN GETDATE() AND DATEADD(week, 52, GETDATE())
GROUP BY
CONVERT(nchar(4), DATEPART(year, [date]))
+ '-' +
CONVERT(nchar(2), DATEPART(wk, [date]))
WITH ROLLUP
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)
DECLARE @start datetime = '2012-6-1'
;WITH tally AS (
SELECT TOP 52 -- change this if you want more or less than a year of data
N = row_number() OVER(ORDER BY (SELECT 0)) - 1
FROM master.dbo.syscolumns sc1)
,weekSums AS (
SELECT
N,
val =
(SELECT COUNT(*) -- Can be ISNULL(SUM(amount), 0) or something else
FROM #myreport
WHERE [date] > DATEADD(dd, N * 7, @start) AND at <= DATEADD(dd, (N + 1) * 7, @start))
FROM tally)
SELECT
totalPurchased = (SELECT sum(val) FROM weekSums),
week1 = (SELECT val FROM weekSums WHERE N = 0),
week2 = (SELECT val FROM weekSums WHERE N = 1),
week3 = (SELECT val FROM weekSums WHERE N = 2),
...
week52 = (SELECT val FROM weekSums WHERE N = 51)
SELECT
FLOOR((DATEDIFF(DAY, 'YourStartDate', [DateColumn])) / 7) + 1 AS [Week],
CAST(CAST(DATEADD(WEEK, FLOOR((DATEDIFF(DAY, 'YourStartData', [DateColumn])) / 7), 'YourStartData') AS DATE) AS NVARCHAR(16)) + ' - ' +
CAST(CAST(DATEADD(DAY, FLOOR((DATEDIFF(DAY, 'YourStartData', [DateColumn])) / 7) * 7 + 6, 'YourStartData') AS DATE) AS NVARCHAR(16)) AS [Range],
COUNT(*) AS [TotalPurchased]
FROM
[Table] WITH (NOLOCK)
GROUP BY
FLOOR((DATEDIFF(DAY, 'YourStartDate', [DateColumn])) / 7)
ORDER BY
FLOOR((DATEDIFF(DAY, 'YourStartDate', [DateColumn])) / 7) + 1