Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Buat tabel 6 x 6 dengan tumpahan otomatis dari upline

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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Query untuk memilih data antara dua tanggal dengan format m/d/yyyy

  2. Bagaimana cara menghasilkan interval menit antara dua tanggal di T-SQL?

  3. Mengapa [tanggal] + ([waktu] - [offset]) non-deterministik di SQL Server 2008?

  4. SQL Server:buat cadangan semua database

  5. Pro dan Kontra menggunakan SqlCommand Siapkan di C#?