Microsoft SQL Server-递归联接
使用MicrosoftSQLServer2008R2,我尝试将12个查询中的每月数据递归地连接到1个查询和结果表中。如果我写了12次查询并将每个查询连接起来,我知道如何连接结果,但是查询已经有16行了,所以我正在寻找一种递归方法 我将使用一个销售示例:Microsoft SQL Server-递归联接,sql,sql-server,join,recursion,Sql,Sql Server,Join,Recursion,使用MicrosoftSQLServer2008R2,我尝试将12个查询中的每月数据递归地连接到1个查询和结果表中。如果我写了12次查询并将每个查询连接起来,我知道如何连接结果,但是查询已经有16行了,所以我正在寻找一种递归方法 我将使用一个销售示例: 我有一张定义如下的桌子 sales(ID int, EmpID int, dt datetime, amount numeric(5,2)). 通过以下查询,我得到了12个表,如何在EmpID上将它们连接在一起,以及如何使用月/年命名列标题:
我有一张定义如下的桌子
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
您可以阅读有关递归公共表表达式的内容。例如:
;WITH Months AS
(
SELECT 1 as [Month]
UNION ALL
SELECT [Month] + 1
FROM Months
WHERE [Month] + 1 < 13
),
SELECT [Month]
FROM Months
查看SQLFIDLE示例。您可以阅读有关递归公共表表达式的内容。例如:
;WITH Months AS
(
SELECT 1 as [Month]
UNION ALL
SELECT [Month] + 1
FROM Months
WHERE [Month] + 1 < 13
),
SELECT [Month]
FROM Months
查看SQLFIDLE示例。你能提供更多信息吗?我不知道这12个表是从哪里来的。你能提供更多信息吗?我不知道这12个表是从哪里来的。
;WITH SalesByMonth AS (
SELECT
EmpID
,MONTH(dt) AS Month
,SUM(Amount) AS Total
FROM
@sales
WHERE
YEAR(dt) = @Year
GROUP BY
EmpID
,MONTH(dt)
)
SELECT
EmpID, [1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12]
FROM (
SELECT
EmpID
,Month
,Total
FROM
SalesByMonth) up
PIVOT (SUM(Total) FOR Month IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12])) AS pvt
ORDER BY
EmpID