Zai*_*Ali 29 t-sql sql-server sql-server-2005
我希望按周选择下表中的数据
Date Product Name Sale
+----------+--------------+-----+
14-05-11 a 2
14-05-11 b 4
17-05-11 c 3
19-05-11 a 6
24-05-11 a 6
29-05-11 a 6
Run Code Online (Sandbox Code Playgroud)
让我们假设今天是 30-05-11
所以我的结果应该是这样的.
Product Name First Week Second Week Third Week
+--------------------+------------+------------+-------------+
a 12 6 2
b 0 0 4
c 0 3 0
Run Code Online (Sandbox Code Playgroud)
请问有些人指导我如何编写SQL查询来实现这种行为!
Ste*_*ieG 40
我认为应该这样做..
Select
ProductName,
WeekNumber,
sum(sale)
from
(
SELECT
ProductName,
DATEDIFF(week, '2011-05-30', date) AS WeekNumber,
sale
FROM table
)
GROUP BY
ProductName,
WeekNumber
Run Code Online (Sandbox Code Playgroud)
inc*_*lly 17
提供的解决方案似乎有点复杂?这可能有帮助:
https://msdn.microsoft.com/en-us/library/ms174420.aspx
select
mystuff,
DATEPART ( year, MyDateColumn ) as yearnr,
DATEPART ( week, MyDateColumn ) as weeknr
from mytable
group by ...etc
Run Code Online (Sandbox Code Playgroud)
cod*_*ger 13
这应该为你做:
Declare @DatePeriod datetime
Set @DatePeriod = '2011-05-30'
Select ProductName,
IsNull([1],0) as 'Week 1',
IsNull([2],0) as 'Week 2',
IsNull([3],0) as 'Week 3',
IsNull([4],0) as 'Week 4',
IsNull([5], 0) as 'Week 5'
From
(
Select ProductName,
DATEDIFF(week, DATEADD(MONTH, DATEDIFF(MONTH, 0, InputDate), 0), InputDate) +1 as [Weeks],
Sale as 'Sale'
From dbo.YourTable
-- Only get rows where the date is the same as the DatePeriod
-- i.e DatePeriod is 30th May 2011 then only the weeks of May will be calculated
Where DatePart(Month, InputDate)= DatePart(Month, @DatePeriod)
)p
Pivot (Sum(Sale) for Weeks in ([1],[2],[3],[4],[5])) as pv
Run Code Online (Sandbox Code Playgroud)
它将计算相对于月份的周数.因此,而不是一年中的第20周,它将是第2周.该@DatePeriod
变量仅用于获取相对于月份的行(在此示例中仅针对5月)
使用我的样本数据输出: