Stworzenie macierzy oznaczałoby denormalizację danych. Zwykle jest to najlepsza praktyka NIE w tym celu, ponieważ między innymi znacznie utrudnia to manipulację danymi. Jak możesz zapobiec sytuacji, w której liczba wierszy przekracza 6? Musisz dodać dziwne ograniczenie, takie jak:
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))
Założę się, że tego nie robisz i dlatego nie możesz „zapewnić” wstawienia do stołu nie więcej niż 6 wierszy. Jeśli to robisz, musisz wstawiać dane jeden wiersz na raz co jest sprzeczne ze wszystkim, o co chodzi w SQL Server. Byłoby to sprawdzenie, czy pierwsza kolumna jest pełna ale potem przejdź do drugiego, potem trzeciego itd... to po prostu nie ma sensu.
Zamiast tego utworzyłbym ParentID
kolumna, aby powiązać twoje nazwiska z odpowiednią siecią jak powiedziałeś. Można to zrobić za pomocą kolumny obliczeniowej w następujący sposób:
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
Następnie, jeśli chcesz wyświetlić go w macierzy użyjesz PIVOT()
, w szczególności Dynamiczny przestaw
. Istnieje wiele przykładów na Stack Overflow, jak to zrobić. Dotyczy to również sytuacji, gdy macierz ma być większa niż 6 X N... być może sieć rośnie tak, że każdy członek ma 50 osób... czyli 6 (wiersze) X 51 (kolumny)
JEŚLI będzie to tylko 6 kolumn lub niewiele więcej, możesz też użyć prostej logiki łączenia...
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
Możesz to zobaczyć w akcji dzięki Tej demonstracji online
Oto kilka informacji na temat normalizacji