按周时段展现销售情况

表里面有很多销售记录,我要把它做成报表,按周时段咱展现一周的销售情况,咱们做呀?

猛跑小猪
浏览 597回答 10
10回答

浮云间

楼上的不错,学习了

子衿沉夜

你好, 你是不是需要一个函数~而这个函数的功能大概是在你传入一个datetime的数据列时返回这个datetime所处的星期n位置 如果是,那么在SQL Server里面你可以使用 PRINT DATENAME(dw, GETDATE()) 然后你就可以在SELECT那里的FROM子句后面的GROUP BY DATENAME(dw, daatetime列)了~~

凤凰求蛊

我需要的结果是如下: 月份  第一周  第二周  第三周  第四周 8       100     3000   4000   2000 9       200     400      2000   2000 像这种

UYOU

我需要的结果是如下: 月份  第一周  第二周  第三周  第四周    第五周 8月份  100     3000   4000   2000      0 9月份   200     4000       0          0       0 10月份  0          0           0         0        0 像这种 要把每一个月拆分周来统计呀

大话西游666

@于汉中: 源数据表的格式是??

缥缈止盈

@dotNetDR_: 哎.一瓶可乐过后.睡不着郁闷.只好做做题了 希望对你有帮助. --建表CREATE TABLE #temp_SalesReport ( [Month] datetime not null, [Amount] money not null)DECLARE @MonthDiffer int --月份差SET @MonthDiffer = 0DECLARE @Amount moneySET @Amount = 100.00DECLARE @StartMonth datetime --开始的月份DECLARE @MenthCOunt int --计算月数 范围{ 1 ... 12 }SET @StartMonth = CAST('2011-01-01' AS datetime)SET @MenthCOunt = 12 --模拟一年的销售DECLARE @MonthDate datetimeSET @MonthDate = DATEADD(dd, -day(@StartMonth) + 1, @StartMonth)--Debug--SELECT @MonthDate--插数据WHILE (@MonthDiffer < @MenthCOunt)BEGIN INSERT INTO #temp_SalesReport ( [Month], [Amount] ) VALUES ( @StartMonth, @Amount ) SET @Amount = @Amount + 100.00 SET @StartMonth = DATEADD(dd, 1, @StartMonth) SET @MonthDiffer = DATEDIFF(mm, @MonthDate, @StartMonth) --print @MonthDifferEND--Debug--SELECT * FROM #temp_SalesReport--DELETE FROM #temp_SalesReport--实现,先计算出月份和第几周;WITH CTE_1 AS ( SELECT (DATENAME(dd, [Month]) + 6) / 7 [WeekOfMonth], -- 加6 是 -1 + 7来的,这列是获取当月的周编号 MONTH([Month]) [MonthForNum], -- 获取月份 --[Month], --Debug时可以取消看结果 [Amount] FROM [#temp_SalesReport]) --select * from CTE_1 --Debug,CTE_2 AS ( SELECT [MonthForNum], [WeekOfMonth], [Amount] FROM CTE_1)--SELECT * FROM CTE_2 --Debug/* Debug (最终结果)SELECT MonthForNum, WeekOfMonth, SUM(Amount) [AmountTotal] FROM CTE_2 GROUP BY MonthForNum, WeekOfMonthORDER BY MonthForNum, WeekOfMonth*/--行转列后的最终结果SELECT CAST(MonthForNum AS NVARCHAR(2)) + N'月份' [月份], [1] [第一周], [2] [第二周], [3] [第三周], [4] [第四周], CASE WHEN [5] is null THEN CAST(0.00 AS money) ELSE [5] END [第五周]FROM ( SELECT * FROM CTE_2 GROUP BY MonthForNum, WeekOfMonth, Amount) [SourceTable]PIVOT ( SUM([Amount]) FOR [WeekOfMonth] IN ( [1], [2], [3], [4], [5] )) [PivotTable] 效果图 行转列参考http://www.cnblogs.com/highend/archive/2011/07/15/how_to_using_pivot_and_unpivot.html

MMMHUHU

@dotNetDR_:要写存储过程吗?

幕布斯6054654

@于汉中: 上面的代码没有用到存储过程噢了~ 只是用到DATANAME函数去获取相应的值然后在去做报表之类. 你如果有那里不懂可以提出,我会尽力为你解答 谢谢
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server