一種方式是你有羣體創造儘可能多的配套表。因此,您將創建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? –