एक मैट्रिक्स बनाना आपके डेटा को असामान्य बनाना होगा। यह आमतौर पर सर्वोत्तम अभ्यास है नहीं ऐसा करने के लिए, क्योंकि यह अन्य कारणों से डेटा हेरफेर को और अधिक कठिन बना देता है। आप पंक्तियों को 6 से अधिक होने से कैसे रोकेंगे? आपको इस तरह एक अजीब बाधा जोड़नी होगी:
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))
मैं शर्त लगा रहा हूं कि आप ऐसा नहीं कर रहे हैं, और इस प्रकार, आप "सुनिश्चित" नहीं कर सकते कि आपकी तालिका में 6 से अधिक पंक्तियां नहीं डाली गई हैं। यदि आप ऐसा कर रहे हैं, तो आपको एक समय में एक पंक्ति data डेटा सम्मिलित करना होगा जो SQL सर्वर के बारे में सब कुछ के खिलाफ जाता है। यह जांचना होगा कि पहला कॉलम पूर्ण है या नहीं फिर भी, फिर दूसरे पर जाएँ, फिर तीसरे पर, आदि... इसका कोई मतलब नहीं है।
इसके बजाय, मैं एक ParentID
बनाउंगा अपने नामों को उनके संबंधित नेटवर्क . से जोड़ने के लिए कॉलम जैसा आपने बताया। यह एक परिकलित कॉलम के साथ किया जा सकता है जैसे:
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
फिर, यदि आप इसे मैट्रिक्स . में प्रदर्शित करना चाहते हैं आप PIVOT()
. का प्रयोग करेंगे , विशेष रूप से डायनामिक पिवट
. इसे कैसे करें इस पर स्टैक ओवरफ़्लो पर बहुत सारे उदाहरण हैं। यदि आप मैट्रिक्स को 6 X N से बड़ा बनाना चाहते हैं तो इसका भी हिसाब है ... शायद नेटवर्क बढ़ता है इसलिए प्रत्येक सदस्य में 50 व्यक्ति होते हैं ... इस प्रकार 6 (पंक्तियाँ) X 51 (कॉलम)
अगर यह केवल 6 कॉलम होने वाला है, या बहुत अधिक नहीं है, तो आप एक साधारण जॉइन लॉजिक का भी उपयोग कर सकते हैं...
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
आप इसे इस ऑनलाइन डेमो के साथ क्रिया में देख सकते हैं
यहां सामान्यीकरण के बारे में कुछ जानकारी दी गई है