2013-01-16 223 views
0

我正在寫一個查詢,以給我本週,本月和今年出售的產品數量(3個單獨的列)到目前爲止,一個月至一年的時間以及一年至今的縮放含義今天例如它會顯示從星期一開始銷售的產品,因爲從本月的第一天開始,從今年的第一天開始,隨着時間的推移這將繼續每一週,每月和每一年,還有其他三個專欄去年同樣的邏輯。我需要的是幫助,讓使用DATEADD DATEDIFF或(例如(DATEADD(分鐘,-15,日期查詢GETDATE()))。SQL獲得每月和每週數據

非常感謝你,也是我正在使用SQL Server 2008中

+1

嘗試此頁:http://sqlserverpedia.com/wiki/Built-in_Functions_-_Date_and_Time_Functions – PowerUser

回答

1

下面是一些未經測試的代碼,其很可能被優化,但是應該讓你朝着正確的方向前進。這使用PIVOT操作將行轉換爲列。

SELECT WeekCount, MonthCount, YearCount 
FROM 
(
SELECT ProductId, 
    CASE 
     WHEN ProductSoldDate >= DATEADD(dd, 1 - DATEPART(dw, GETDATE()), GETDATE()) 
     THEN 'WeekCount' 
     WHEN ProductSoldDate >= DATEADD(mm, DATEDIFF(mm,0,GETDATE()), 0) 
     THEN 'MonthCount' 
     WHEN ProductSoldDate >= DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0) 
     THEN 'YearCount' 
    END as lbl 
FROM Products 
) ProductSales 
PIVOT 
(
COUNT(ProductId) 
FOR lbl IN ([WeekCount], [MonthCount], [YearCount]) 
) t 

這裏是SQL Fiddle

祝你好運。

+0

查看編輯 - 添加SQL小提琴以及(網站是一分鐘前,無法測試)。祝你好運。 – sgeddes

+0

非常感謝這給了我我需要的東西。 – frank

0

使用DATEADD函數

在某些情況下,你可能想的時間間隔添加到datetime或smalldatetime值或減去的時間間隔。例如,您可能需要添加或從中減去一個月您可以使用DATEADD函數來執行此計算,該函數採用以下語法:

DATEADD(日期/ time_part,數字,日期)

實施例:

SELECT OrderDate, DATEADD(mm, 3, OrderDate) AS NewDate 
FROM Sales.Orders 
WHERE OrderID = 1001 

使用DATEDIFF函數

的DATEDIFF函數計算兩個日期之間的時間間隔返回一個表示間隔的整數。該函數的語法如下:

DATEDIFF(日期/ time_part,日期,結束日期)

實施例:

SELECT OrderDate, DelivDate, 
    DATEDIFF(hh, OrderDate, DelivDate) AS HoursDiff 
    FROM Sales.Orders 
    WHERE OrderID = 1002