Membuat Matriks akan mendenormalisasi data Anda. Ini biasanya praktik terbaik TIDAK untuk melakukan ini, karena membuat manipulasi data jauh lebih sulit, di antara alasan lainnya. Bagaimana Anda mencegah baris menjadi lebih dari 6? Anda harus menambahkan batasan aneh seperti ini:
create table #matrix ( ID int identity(1,1),
Name1 varchar(64),
Name2 varchar(64),
Name3 varchar(64),
Name4 varchar(64),
Name5 varchar(64),
Name6 varchar(64),
CONSTRAINT ID_PK PRIMARY KEY (ID),
CONSTRAINT Configuration_SixRows CHECK (ID <= 6))
Saya bertaruh Anda tidak melakukan ini, dan dengan demikian, Anda tidak dapat "memastikan" tidak lebih dari 6 baris dimasukkan ke dalam tabel Anda. Jika Anda melakukan ini, maka Anda harus memasukkan data satu baris dalam satu waktu yang bertentangan dengan semua tentang SQL Server. Ini untuk memeriksa apakah kolom pertama penuh namun, kemudian pindah ke yang kedua, lalu yang ketiga, dst... itu tidak masuk akal.
Sebagai gantinya, saya akan membuat ParentID
kolom untuk menghubungkan nama Anda dengan jaringan masing-masing seperti yang Anda nyatakan. Ini dapat dilakukan dengan kolom yang dihitung seperti ini:
declare @table table (ID int identity(1,1),
Names varchar(64),
ParentID as case
when ID <= 6 then null
else replace(ID % 6,0,6)
end)
insert into @table
values
('John')
,('Peter')
,('Mary')
,('Lary')
,('Anderson')
,('Paul')
,('Seven')
,('Eight')
,('Nine')
,('Ten')
,('Eleven')
,('Twelve')
,('Thirteen')
,('Fourteen')
select * from @table
Kemudian, jika Anda ingin menampilkannya dalam matriks anda akan menggunakan PIVOT()
, khususnya Dynamic Pivot
. Ada banyak contoh di Stack Overflow tentang cara melakukan ini. Ini juga menjelaskan jika Anda ingin matriks lebih besar dari 6 X N... mungkin jaringan tumbuh sehingga setiap anggota memiliki 50 individu... jadi 6 (baris) X 51 (kolom)
JIKA itu hanya akan menjadi 6 kolom, atau tidak lebih, maka Anda juga dapat menggunakan logika join sederhana...
select
t.ID
,t.Names
,t2.Names
,t3.Names
from @table t
left join
@table t2 on t2.ParentID = t.ID and t2.ID = t.ID + 6
left join
@table t3 on t3.ParentID = t.ID and t3.ID = t.ID + 12
--continue on
where
t.ParentID is null
Anda dapat melihat ini beraksi dengan DEMO OnLine Ini
Berikut adalah beberapa informasi tentang normalisasi