Упрощенный крест присоединяется? - PullRequest
4 голосов
/ 28 апреля 2011

Давайте посидим. У меня есть таблица '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)

Ответы [ 3 ]

1 голос
/ 28 апреля 2011

Следующее будет работать для таблицы любого размера (хотя я протестировал ее только с 6 строками).Он использует функции ранжирования, доступные в SQL Server 2005 и более поздних версиях, но идея должна быть адаптирована к любой СУБД.

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
1 голос
/ 28 апреля 2011

что-то подобное должно работать, я думаю

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

вы создадите вторую таблицу, но не сохраните ее.

0 голосов
/ 28 апреля 2011

Вы должны быть в состоянии достичь этого с помощью

select * from A cross join
(select 1
  union all
 select 2
  union all
 select 3
  union all
 select 4)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...