2017-10-17 3 views
0

Dire que j'ai une colonne:Déclaration unique SELECT pour récupérer toutes les combinaisons possibles de 1 colonnes Valeurs Oracle

COLUMN 
Bread 
Butter 
Toast 
Jam 

je besoin d'une seule requête de sélection efficace qui renverra:

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

sélectionnez a.item || '' || b.item de xxx a, xxx b où a.item <> b.item; – tonypdmtr

+0

beurk. pas délicieuse ... –

+0

"En matière de goût, il ne peut y avoir de différends" – tonypdmtr

Répondre

3

La requête suivante doit faire ce que vous voulez, elle joint la table sur elle-même et supprime les lignes correspondant à un élément.

SELECT 
     T1.COLUMN || ' ' || T2.COLUMN 
FROM 
     TABLE T1 
JOIN 
     TABLE T2 ON T2.COLUMN <> T1.COLUMN 
1
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' :) 
0

N'est-ce pas simplement un cross join avec un filtre 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];