0

我有 3 个字段( ID、Price、Date ),它看起来像这样..

|ID|  |Price|    |           Date      |
--------------------------------------------
|001|  |150.00|  | 2007-01-01 11:48:18.000 |
|002|  |150.00|  | 2007-01-01 15:57:19.000 |
|003|  |150.00|  | 2007-01-02 13:26:12.000 |
|004|  |150.00|  | 2007-01-03 10:31:14.000 |

等等等等

我需要显示一段时间内每一天的总销售额。所以当我把 1 月 1 日到 1 月 6 日... 应该是

|   Days     |    Total Sales |
-------------------------------
| January 1  | --some amount  |
| January 2  | --some amount  |
| January 3  | --some amount  |
| January 4  | --some amount  |
| January 5  | --some amount  |
| January 6  | --some amount  |

我只是想不通,我坚持使用这段代码:) ...

DECLARE @StartDate dateTime,@EndDate dateTime, @TotalSales integer

SET @StartDate = '2007-01-02 11:41:19.000' 
SET @EndDate = '2007-01-02 11:46:06.000'
SET @TotalSales = 0

while ( @StartDate = '2007-01-02 11:41:19.000' )
BEGIN

--Some codes

END

谢谢 :)

4

2 回答 2

1

您不需要循环,尽可能使用集合操作:

DECLARE @StartDate dateTime,@EndDate dateTime

SET @StartDate = convert(DateTime,'2007-01-01 11:41:19.000',102)
SET @EndDate = convert(DateTime,'2007-01-04 11:46:06.000',102) 

;WITH CTE AS (
    SELECT ID,Price,[Date]  
    FROM Sales
    WHERE [Date] Between @StartDate AND @EndDate
)
SELECT DATENAME( month ,[Date] ) + ' ' + DATENAME( day ,[Date] ) AS Days
     , SUM(Price)AS 'Total Sales'
FROM CTE 
GROUP BY DATENAME( month ,[Date] ) + ' ' + DATENAME( day ,[Date] )

SQL-Fiddle 演示

于 2012-11-19T08:28:22.070 回答
0

这类似于 Tim Schmelter 的解决方案,只是它处理没有任何销售数据的日子:

DECLARE @StartDate DATETIME, @EndDate DATETIME
SELECT @StartDate = '01-01-2007', @EndDate = '01-06-2007'

;WITH DateRange ([Date]) AS
(
    SELECT 
      @StartDate [Date]
    UNION ALL
    SELECT 
      DATEADD(DAY, 1, [Date]) [Date] 
    FROM 
      DateRange 
    WHERE 
      [Date] < @EndDate
)


SELECT 
  DATENAME(MONTH, d.[Date]) + ' ' + DATENAME(DAY, d.[Date]) AS Days,
  SUM(ISNULL(Price, 0)) AS [Total Sales]
FROM 
  DateRange d
LEFT JOIN 
  Sales s 
ON 
  d.[Date] = DATEADD(DAY, DATEDIFF(DAY, 0, s.[Date]), 0)
GROUP BY 
  DATENAME(MONTH, d.[Date]) + ' ' + DATENAME(DAY, d.[Date])

SQL 小提琴示例

于 2012-11-19T10:45:35.140 回答