【发布时间】:2013-12-06 18:10:38
【问题描述】:
使用 Microsoft SQL Server 2008 R2,我正在尝试将每月数据从 12 个查询递归连接到 1 个查询和结果表中。如果我写出 12 次查询并加入每个查询,我知道如何加入结果,但查询已经有 16 行长,所以我正在寻找一种递归方式。
我将使用一个销售示例:
我有一个具有以下定义的表
sales(ID int, EmpID int, dt datetime, amount numeric(5,2)).
通过以下查询,我得到了 12 个表,如何在 EmpID 上将它们全部连接在一起,以及如何使用月/年命名列标题:
DECLARE @mo INT, @yr INT
SET @mo = 1
SET @yr = YEAR(GETDATE())
WHILE (@mo < 13)
BEGIN
SELECT EmpID, SUM(numeric) AS Totals WHERE MONTH(dt) = @mo AND YEAR(dt) = @yr GROUP BY EmpID
SET @mo = @mo + 1
END
我希望结果类似于:
EmpID 1-2012 2-2012 ... 12-2012
----- ------- ------- -------
1 XXXX.XX XXXX.XX XXXX.XX
...
100 XXXX.XX XXXX.XX XXXX.XX
【问题讨论】:
-
你能提供更多信息吗?我不明白这 12 个表的来源。
标签: sql sql-server join recursion