Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Return all possible combinations of values on columns in SQL

How do I return a list of all combinations of values in 2 columns so they are new rows in T-SQL?

e.g.

Col1, Col2
----  ----
1     2
1     4
1     5

and turn this into all combinations:

1     2
1     4
1     5
2     4
2     5
4     5
like image 513
jaffa Avatar asked Dec 07 '10 16:12

jaffa


4 Answers

Assuming at least SQL 2005 for the CTE:

;with cteAllColumns as (
    select col1 as col
        from YourTable
    union
    select col2 as col
        from YourTable
)
select c1.col, c2.col 
    from cteAllColumns c1 
        cross join cteAllColumns c2 
    where c1.col < c2.col
    order by c1.col, c2.col
like image 188
Joe Stefanelli Avatar answered Oct 14 '22 03:10

Joe Stefanelli


You could cartesian join the table to itself, which would return all combinations of both columns.

select 
    distinct
    t1.Col1,
    t2.Col2
from 
    MyTable t1,
    MyTable t2
like image 32
Bob Black Avatar answered Oct 14 '22 05:10

Bob Black


You can do a self cross join...

SELECT a.Col1, b.Col2
FROM MyTable a
CROSS JOIN MyTable b
like image 15
JNK Avatar answered Oct 14 '22 04:10

JNK


I was looking for something that would do this using only the SQL available to Microsoft Access 2016. I ended up figuring out something that others may find useful. This code utilizes CROSS JOIN so I found that it is necessary to split the two columns into two separate tables (each with one column). The AND statement forces one column to be less than the other, thereby eliminating any repetitive 1-2, 2-1 sort of occurrences.

SELECT DISTINCT Table1.Column1, Table2.Column1
FROM Table1, Table2
WHERE Table1.Column1 <> Table2.Column1
AND Table2.Column1 < Table1.Column1;
like image 9
Josh Avatar answered Oct 14 '22 03:10

Josh