2011-04-28 104 views
4

让我们坐在我有一个表 'A' 与行:简化的交叉连接?

A 
B 
C 
D 

有一个简单的方法做一个交叉连接创建

A 1 
A 2 
A 3 
A 4 
... 
D 1 
D 2 
D 3 
D 4 

,而无需创建第二个表?

喜欢的东西:

SELECT * 
FROM A 
    CROSS JOIN (1,2,3,4) 

回答

1

这样的事情应该工作,我想

select * from A cross join (select 1 union all select 2 union all select 3 union all select 4) as tmp 

您将创建第二个表,但你不会坚持它。

0

你应该能够做到这一点通过

select * from A cross join 
(select 1 
    union all 
select 2 
    union all 
select 3 
    union all 
select 4) 
1

下面会为任何规模的一个工作表中(虽然我只测试了其对6行)。它使用SQL Server 2005中可用的排名函数,但这个想法应该适用于任何RDBMS。

SELECT ta.SomeColumn, cj.Ranking 
from TableA ta 
    cross join (select row_number() over (order by SomeColumn) Ranking from TableA) cj 
order by ta.SomeColumn, cj.Ranking