一种方式是你有群体创造尽可能多的配套表。因此,您将创建table1
,table2
和table3
。
然后,您将组1中所有值的SELECT DISTINCT
转换为table1
,依此类推。
现在您需要将这三个表拼接在一起作为新表中的列。要做到这一点,你需要另一个元素 - 一个计数器。根据你的SQL风格,你可以用几种不同的方式来完成这个任务。
最后,你将有形式的三个表
Table1 Table2 Table3
id value id value id value
1 a 1 d 1 f
2 b 2 e 2 g
3 c 3 h
4 i
链接在一起的这些,你选择了最长的一个,并与别人跑LEFT JOIN
S:
SELECT table1.value AS group1, table2.value AS group2, table3.value AS group3
FROM table3
LEFT JOIN table2 ON (table3.id = table2.id)
LEFT JOIN table1 ON (table3.id = table1.id);
,并会得到
group1 group2 group3
a d f
b e g
c NULL h
NULL NULL i
您还可以对所有值进行增量分组编号s使用一个附加列:
xid group value
1 1 a
2 1 b
3 1 c
1 2 d
2 2 e
1 3 f
...
请注意(group,xid)现在是主键。现在你可以加入你自己的表格:
SELECT t1.value AS g1, t2.value AS g2, t3.value AS g3
FROM yourtable AS t3
LEFT JOIN yourtable AS t1 ON (t3.xid = t1.xid)
LEFT JOIN yourtable AS t2 ON (t3.xid = t2.xid)
在这里再一次,组3是基数最大的一个。这不需要额外的表格,但是用于拼接枢轴的一个额外列xid
的编号稍微复杂一些。
可能是你正在寻找什么叫“枢轴”在SQL ....但它不会完成这至少我的知识 – Praveen
但是,如果你有不同的基数会发生什么 - 如果你有3组1,但没有组2也许五组2? – LSerni
您正在使用哪些DBMS? –