在SQL服务器中的表中重置换位。

问题描述 投票:0回答:2

想象一下,我有下面的表。

----------------
 ID   f1     f2
----------------
 A   1001   5001
 B   1001   5001
 B   1001   5002
 B   1002   5001
 B   1002   5002
 C   1001   5003
 C   1001   5004

(每个ID的f1和f2的所有可能的排列组合都存在)有没有什么查询能给我这个?

A   1001
A   5001
B   1001
B   1002
B   5001
B   5002
C   1001
C   5003
C   5004

所有不同的值f1和f2为每个IDthank you。

sql sql-server permutation
2个回答
2
投票

使用方法 apply 而不使用 union all :

select distinct t.id, f_val
from table t cross apply
     ( values (f1), (f2) ) tt(f_val)
order by t.id;

0
投票

你可以使用 CROSS APPLY:

SELECT DISTINCT s.ID, s.f
FROM t
CROSS APPLY (SELECT ID, f1 UNION ALL SELECT ID, f2) AS s(ID, f)

0
投票

希望下面的查询能帮到你。

create
table test(ID 
char(1),f1
int, f2 
int)
insert
into test values('A',1001,5001),('B',
 1001, 5001),('B', 1001, 5002),('B',
 1002, 5001),('B', 1002, 5002),('C',1001,5003),('C',1001,5004)
 
Select
distinct ID, f 
from (Select ID, f1
as f From test 
union select ID, f2
as f from test) ff
© www.soinside.com 2019 - 2024. All rights reserved.