0

3つのフィールド(ID、価格、日付)があり、次のようになります。

|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

ループは必要ありません。可能な限りset操作を使用してください。

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-フィドルデモ

于 2012-11-19T08:28:22.070 に答える
0

これは、販売データがない日を処理することを除いて、TimSchmelterのソリューションに似ています。

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 に答える