Reputation: 39
I have a table that looks like the following:
LETTERS
--------
A
B
C
D
E
F
G
H
I'd like to create a View that lists all the 3 letter combinations of these letters without repetition in the following way i.e. assigning a number to each combination.
ViewNew
-------
1 A
1 B
1 C
2 A
2 B
2 D
3 A
3 B
3 E
and so on.
Is the above possible? Any help will be much appreciated.
Upvotes: 3
Views: 251
Reputation: 5374
For permutations (order is important):
DECLARE @q as table([No] int, L1 char(1), L2 char(1), L3 char(1))
INSERT INTO @q
SELECT
ROW_NUMBER() OVER (ORDER BY L1.Letter, L2.Letter, L3.Letter, L1.Letter),
L1.Letter,
L2.Letter,
L3.Letter
FROM
Letters L1 CROSS JOIN
Letters AS L2 CROSS JOIN
Letters AS L3
WHERE
(L1.Letter <> L2.Letter) AND
(L2.Letter <> L3.Letter) AND
(L1.Letter <> L3.Letter)
SELECT [No], L1 AS Letter FROM @q
UNION
SELECT [No], L2 FROM @q
UNION
SELECT [No], L3 FROM @q
This can actually be done in a single query, yet with repetition of @q query. I would move @q query into subview, if View is the goal.
Update:
Use UNPIVOT
to make things even simpler, as pointed out in Bhosale's answer.
Upvotes: 1
Reputation: 3106
Check This. Using Joins and UNPIVOT we can find all permutions of letters.
select ID,ViewNew from
(
select row_number() over(order by (select 1)) AS ID,
C2.LETTERS as '1' ,C1.LETTERS AS '2' ,c3.LETTERS as '3' from #tableName C1,#tableName c2,#tableName c3
where C1.LETTERS != c2.LETTERS and c2.LETTERS ! = c3.LETTERS and c1.LETTERS ! = c3.LETTERS
) a
UNPIVOT
(
ViewNew
FOR [LETTERS] IN ([1], [2], [3])
)as f
OutPut :
Upvotes: 1
Reputation: 2478
If you want to create a list of all unique combinations between two tables, you need only select from both tables at once and SQL Server will give you what you're after. This is called a CROSS JOIN
.
declare @t1 table (letter char(1))
declare @t2 table (number int)
insert @t1 values ('A'), ('B'), ('C')
insert @t2 values (1), (2), (3), (4)
select t2.number, t1.letter from @t1 as t1, @t2 as t2
Results
number letter
--------------
1 A
1 B
1 C
2 A
2 B
2 C
3 A
3 B
3 C
4 A
4 B
4 C
Upvotes: -1