2013-01-16 224 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