Digamos que tengo una columna:

COLUMN
Bread
Butter
Toast
Jam

Necesito una única consulta de selección eficiente que devolverá:

COLUMN
Bread Butter
Bread Toast
Bread Jam
Butter Bread
Butter Toast
Butter Jam
Toast Bread
Toast Butter
Toast Jam
Jam Bread
Jam Butter
Jam Toast
0
user8791446 17 oct. 2017 a las 20:27

3 respuestas

La mejor respuesta

La siguiente consulta debe hacer lo que desea, une la tabla en sí misma y elimina las filas que coinciden con un elemento.

SELECT 
      T1.COLUMN || ' ' || T2.COLUMN
FROM
      TABLE T1
JOIN
       TABLE T2 ON T2.COLUMN <> T1.COLUMN
3
jrtapsell 17 oct. 2017 a las 22:23
select c1 || ' ' || c2
from 
( select column as c1 from table ),
( select column as c2 from table )
where c1 <> c2 -- this avoids the commented 'jam jam' :)
1
Randy 17 oct. 2017 a las 17:40

¿No es solo una unión cruzada con un filtro simple ?

with [Data] as (
         select *
         from (values
             (N'Bread')
           , (N'Butter')
           , (N'Toast')
           , (N'Jam')
         ) as a ([Value])
     )
select a.[Value] + N' ' + b.[Value] as [Value]
from [Data] as a
cross join [Data] as b
where a.[Value] <> b.[Value];
0
Kittoes0124 17 oct. 2017 a las 17:38