[英]Cross Join 'n' times a table
可以编写通用函数/过程/选择/其他方法来针对自己的“ n”次交叉连接表吗? (是的,“ n”是给定的参数:)
你会怎么做?
例
有此表:
Value
-------
1
2
3
交叉加入2次,将返回:
Value | Value
------------------
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
使用动态SQL,SQL Server 2005 +(@ table_name和@numCrossJoins是存储过程参数):
DECLARE @upperLimit INT
SET @upperLimit = 1
DECLARE @SQL NVARCHAR(MAX)
SET @SQL = 'SELECT * FROM '+ @table_name +' '
BEGIN
WHILE (upperLimit <= @numCrossJoins)
BEGIN
SET @SQL = @SQL + 'CROSS JOIN '+ QUOTENAME(@table_name) +' '
SET @upperLimit = @upperLimit + 1
END
EXEC sp_executesql @SQL
END
您可以生成动态sql以输出所需的任意多个交叉联接:
create table #t (value int)
insert into #t values (1)
insert into #t values (2)
insert into #t values (3)
declare @n int
set @n = 4
declare @sql varchar(max)
set @sql = 'SELECT * FROM #t t'
declare @i int
set @i = 0
while (@i <= @n)
begin
set @sql = @sql + ' cross join #t t' + CAST(@i as varchar)
set @i = @i + 1
end
print @sql
execute(@sql)
drop table #t
尝试这个:
SET @SQL = 'SELECT * FROM ' + replicate('[' + @table_name + '],', @N);
set @SQL = LEFT(LEN(@SQL) - 1);
EXEC sp_executesql @SQL;
如果您需要提出所有可能的排列方式,请参考以下示例:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.