2011-12-22 53 views
0

首先,计算各月,年和组数据,我的表结构是类似这样的:SQL服务器:通过一些

CREATE TABLE Testing(
     [ID]  NVARCHAR(50), 
     [DATE]  DATETIME, 
     [TOTAL]  INT, 
     [ITEM]  NVARCHAR(50), 
     [Warehouse] NVARCHAR(50) 
)ON[PRIMARY] 

我在这里放一些样品:

[ID] [Date]  [Total] [Item] [Warehouse] 
1 2011-04-04 400  A0001 B12 
2 2011-05-04 500  A0001 B13 
3 2011-04-30 400  A0001 B12 
4 2011-04-25 400  A0001 B13 
5 2011-06-05 600  A0001 B12 
6 2011-03-02 300  A0001 B11 
7 2011-05-28 500  A0001 B13 

我试图按月按[项目]和[仓库]和[日期]分组 例如输出:

结果应该是这样的

[Date]  [Total] [Item] [Warehouse] 
March 2011  300  A0001 B11 
April 2011  800  A0001 B12 
June 2011  500  A0001 B12 
April 2011  400  A0001 B13 
May 2011  1000  A0001 B13 

我试过SQL类似的东西,我在月和年部分解析来进行的选择

SELECT [Item],[Warehouse],SUM(Total) AS Total 
FROM [Testing] 
WHERE Datepart(month,[Date]) = 4 AND DATEPART(year,[Date]) = 2011 
GROUP BY [Item],[Warehouse] 

我得到预期的结果?有什么办法呢?我实际上试图通过仓库和物品的不同来实现每个月和每年的收支平衡?

听起来它需要通过前缀表循环.. 无论如何这样做呢?

感谢

问候 Liangck

回答

1

我认为,在SQL Server端格式化日期(通常)床的想法,但无论如何你可以试试:

select datename(mm, dateadd(m, datediff(m, 0, [date]), 0)) + ' ' + 
     select cast(datepart(yy, dateadd(m, datediff(m, 0, [date]), 0)) as varchar) 
     [date] sum(total) as total, item,warehouse 
from testing 
group by item, warehouse, dateadd(m, datediff(m, 0, [date]), 0) 
+0

谢谢@Michal,我认为这是我想要的......非常感谢 – Worgon 2011-12-22 08:22:19

3

看一看以下功能

DATENAME (Transact-SQL)DATEPART

看一看下面的例子中

DECLARE @Table TABLE(
     DateValue DATETIME 
) 

INSERT INTO @Table SELECT '01 Jan 2011' 
INSERT INTO @Table SELECT '01 Feb 2011' 
INSERT INTO @Table SELECT '01 Feb 2011' 

SELECT DATENAME(month,DateValue) + ' ' + CAST(DATEPART(year,DateValue) AS VARCHAR(4)), 
     COUNT(1) TotalCnt 
FROM @Table 
GROUP BY DATENAME(month,DateValue) + ' ' + CAST(DATEPART(year,DateValue) AS VARCHAR(4)) 

个结果:

February 2011 2 
January 2011 1 
+0

您好:我想我想的是如何选择但不会改变输出。但无论如何,你的解释是有帮助的。感谢@astander为你的时间。 – Worgon 2011-12-22 08:23:39