Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

अपलाइन से स्वचालित स्पिल के साथ तालिका 6 x 6 बनाएं

एक मैट्रिक्स बनाना आपके डेटा को असामान्य बनाना होगा। यह आमतौर पर सर्वोत्तम अभ्यास है नहीं ऐसा करने के लिए, क्योंकि यह अन्य कारणों से डेटा हेरफेर को और अधिक कठिन बना देता है। आप पंक्तियों को 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

आप इसे इस ऑनलाइन डेमो के साथ क्रिया में देख सकते हैं

यहां सामान्यीकरण के बारे में कुछ जानकारी दी गई है




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर क्वेरी में समूह का उपयोग कैसे करें?

  2. एसक्यूएल सर्वर जॉब्स को एक साथ चलाने से कैसे रोकें

  3. SQL सर्वर 2000 से कनेक्ट नहीं हो सकता

  4. एसक्यूएल पिवट टेबल डायनेमिक

  5. SQL सर्वर और स्पेक्टर/मेल्टडाउन कमजोरियाँ