我试图在更改where子句中的某些值的同时将同一个表与自身合并在一起。我的问题是循环之间的联合。我不能使用表变量,因为架构太复杂了,无法每次手动编写。临时表似乎是要走的路,但我不知道如何使其正常工作和正确的语法。
我正在尝试实现的伪代码:
DECLARE @var int, #tempTable SET @var = someValue WHILE expressionIncludingVar #tempTable = SELECT * FROM someTable WHERE column = @var UNION ALL #tempTable SET @var = someChangeToVar RETRUN #tempTable
查询的结果应为#tempTable,因此为怪异的“ RETURN #tempTable”。
先感谢您。
编辑:另一个硬编码的示例:我正试图对这样的东西进行硬编码:
SELECT someAggregateColumns FROM table WHERE someDateColumn > @date and < someDateColumn < DATEADD(month, 2, @date) GROUP BY someColumn UNION ALL SELECT someAggregateColumns FROM table WHERE someDateColumn > DATEADD(month, 1, @date) and and < someDateColumn < DATEADD(month, 1, DATEADD(month, 3, @date)) GROUP BY someColumn SELECT someAggregateColumns FROM table WHERE someDateColumn = DATEADD(month, 2, @date) DATEADD(month, 1, DATEADD(month, 4, @date)) GROUP BY someColumn UNION ALL ....etc
递归CTE可能为您工作。
你可以试试看
DECLARE @MyTable TABLE(ID INT, ColumnA VARCHAR(10), ColumnB VARCHAR(10)) INSERT INTO @MyTable VALUES (1,'A', '10'), (2,'B', '11'), (3,'C', '12'), (4,'D', '13'), (5,'E', '14'), (6,'F', '15'), (7,'H', '16') DECLARE @var INT = 4 ;WITH CTE AS ( SELECT * FROM @MyTable WHERE ID = @var UNION ALL SELECT T.* FROM CTE INNER JOIN @MyTable T ON CTE.ID - 1 = T.ID ) SELECT * INTO #tempTable FROM CTE SELECT * FROM #tempTable DROP TABLE #tempTable