我有这个示例表:
CREATE TABLE Balls
(
BallId int primary key identity(1,1) NOT NULL,
Color char(1) NOT NULL,
Number int NOT NULL
)
我有不同颜色的球,每个球都有一个数字。表格中的数据示例:
BallId Color Number
4 G 1
9 G 2
1 R 1
2 R 2
3 R 3
5 W 1
6 W 2
7 W 3
8 W 4
我需要所有不同球的所有排列(在这种情况下为G-R和W)与数字。 例如:
G1 R1 W1
G1 R1 W2
G1 R1 W3
G1 R1 W4
G1 R2 W1
...
G2 R3 W4
“G1 R1 W1”等于“R1 G1 W1”(顺序无关紧要)。 我需要tsql脚本来生成这种排列。提前谢谢!
答案 0 :(得分:0)
除非您采取措施限制结果,否则连接表将产生排列。
select g.color, g.number, r.color, r.number, w.color, w.number
from Balls g, Balls r, Balls w
where g.color = 'G'
and r.color = 'R'
and w.color = 'W'
答案 1 :(得分:0)
使用动态SQL来提供可扩展的解决方案:
DECLARE @sql NVARCHAR(MAX), @sql2 NVARCHAR(MAX), @Parm NVARCHAR(30)
SET @sql = N'SELECT @SQL2 = ''SELECT ''+STUFF((SELECT DISTINCT '', T''+COLOR+''.COLOR'' + ''+CAST(T''+ COLOR +''.NUMBER AS NVARCHAR(2))'' as ''data()'' FROM Balls FOR XML PATH('''')),1,2,'''')'+' (SELECT DISTINCT ''FROM ''+STUFF((SELECT DISTINCT '', Balls T''+COLOR ''data()'' FROM Balls FOR XML PATH('''')),1,2,'''')) +'' WHERE ''+ STUFF((SELECT DISTINCT '' AND T''+ COLOR +''.COLOR'' + '' = '' + + '''''''' + COLOR + '''''''' as ''data()'' FROM Balls FOR XML PATH('''')),2,3,'''') '
SET @Parm = N'@SQL2 varchar(MAX) OUTPUT'
EXECUTE sp_executesql @SQL, @Parm, @SQL2=@SQL2 OUTPUT
EXEC (@SQL2)
请参阅this SQL-Fiddle进行测试。