दिलचस्प पोस्ट
यूआरएल को कैसे पार्स करना है? विशेष स्थान पर पॉपअप विन्डो कैसे दिखाना है? XPath में अनुक्रमित 1 से शुरू करते हैं और 0 से क्यों नहीं? 64-बिट के साथ एक 32-बिट लूप गिनती चर को बदलकर पागल प्रदर्शन विचलन का परिचय दिया गया है कैसे एक दूसरे से जावा हैशैप सामग्री पर सभी डाल करने के लिए, लेकिन मौजूदा कुंजी और मूल्यों की जगह नहीं है? एकाधिक एडब्ल्यूएस खातों के साथ क्रेडेंशियल प्रबंधन करने का अनुशंसित तरीका? Google ऐप स्क्रिप्ट टाइमआउट ~ 5 मिनट? Ia32-libs (संस्करण 12, 13 और 14 के लिए काम करता है) के बिना 64-बिट उबंटू पर एंड्रॉइड का एप्ट एंड एडीबी काम कैसे करें Git उपवर्तन से बेहतर क्यों है? क्यों दिनांक का समय है। AddHours काम करने के लिए प्रतीत नहीं होता है? केवल-पढ़ने योग्य गुण शुद्ध जावास्क्रिप्ट में लागू हो सकते हैं? कुछ स्ट्रिंग्स के लिए कस्टम ऑब्जेक्ट्स के साथ एक ArrayList में खोजना कैसे नोड। Js के कंसोल फ़ॉन्ट रंग को बदलना है? उड़ी से बिटमैप कैसे प्राप्त करें? उड़ने पर PHP ज़िप फाइलें

गतिशील स्तंभ एसक्यूएल बनाएँ

मेरे पास ग्राहक की एक मेज है

Customer ID Name 1 John 2 Lewis 3 Mary 

मेरे पास एक और टेबल ग्राहक रिवार्ड्स हैं

  TypeID Description 1 Bronze 2 Silver 3 Gold 4 Platinum 5 AnotherOne 

और अंतिम तालिका

  RewardID TypeID CustomerID 1 1 1 2 1 1 3 2 1 4 2 2 

ग्राहक प्रकार की तालिका गतिशील है, इनमें से कई प्रकारों को जोड़ा और निकाला जा सकता है असल में मैं चाहता हूं कि सभी कॉलम गतिशील रूप से उत्पन्न हों और प्रत्येक में एक गिनती, कुछ ऐसा

 CustomerName Bronze Silver Gold Platinum AnotherOne total John 2 1 0 0 0 3 Lewis 0 1 0 0 0 1 Grand TOTAL 2 2 0 0 0 4 

इस समस्या की तरह मैंने कहा कि प्रकार गतिशील हैं और ग्राहकों को गतिशील हैं इसलिए मुझे सिस्टम में प्रकार के आधार पर गतिशील होने के लिए कॉलम की आवश्यकता है

मैंने सी # को टैग किया है क्योंकि मुझे इसकी आवश्यकता एक डाटाग्रीड दृश्य में है

अग्रिम में धन्यवाद

Solutions Collecting From Web of "गतिशील स्तंभ एसक्यूएल बनाएँ"

आप इसके लिए एक PIVOT फ़ंक्शन का उपयोग करना चाहेंगे। यदि आपके पास कॉलम की एक ज्ञात संख्या है, तो आप मूल्यों को कड़ी मेहनत कर सकते हैं:

 select name, [Bronze], [Silver], [Gold], [Platinum], [AnotherOne] from ( select c.name, cr.description, r.typeid from customers c left join rewards r on c.id = r.customerid left join customerrewards cr on r.typeid = cr.typeid ) x pivot ( count(typeid) for description in ([Bronze], [Silver], [Gold], [Platinum], [AnotherOne]) ) p; 

डेमो के साथ एसक्यूएल फिडल देखें

अब अगर आपके पास कोई अज्ञात कॉलम है, तो आप गतिशील एसक्यूएल को PIVOT उपयोग कर सकते हैं:

 DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX) select @cols = STUFF((SELECT ',' + QUOTENAME(description) from customerrewards group by description, typeid order by typeid FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @query = 'SELECT name,' + @cols + ' from ( select c.name, cr.description, r.typeid from customers c left join rewards r on c.id = r.customerid left join customerrewards cr on r.typeid = cr.typeid ) x pivot ( count(typeid) for description in (' + @cols + ') ) p ' execute(@query) 

देखें डेमो के साथ एसक्यूएल बेलाल

यदि आपको Total स्तंभ शामिल करने की आवश्यकता है, तो आप ROLLUP ( स्थिर संस्करण डेमो ) का उपयोग कर सकते हैं:

 select name, sum([Bronze]) Bronze, sum([Silver]) Silver, sum([Gold]) Gold, sum([Platinum]) Platinum, sum([AnotherOne]) AnotherOne from ( select name, [Bronze], [Silver], [Gold], [Platinum], [AnotherOne] from ( select c.name, cr.description, r.typeid from customers c left join rewards r on c.id = r.customerid left join customerrewards cr on r.typeid = cr.typeid ) x pivot ( count(typeid) for description in ([Bronze], [Silver], [Gold], [Platinum], [AnotherOne]) ) p ) x group by name with rollup 

गतिशील संस्करण ( डेमो ):

 DECLARE @cols AS NVARCHAR(MAX), @colsRollup AS NVARCHAR(MAX), @query AS NVARCHAR(MAX) select @cols = STUFF((SELECT ',' + QUOTENAME(description) from customerrewards group by description, typeid order by typeid FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') select @colsRollup = STUFF((SELECT ', Sum(' + QUOTENAME(description) + ') as '+ QUOTENAME(description) from customerrewards group by description, typeid order by typeid FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @query = 'SELECT name, '+ @colsRollup + ' FROM ( SELECT name,' + @cols + ' from ( select c.name, cr.description, r.typeid from customers c left join rewards r on c.id = r.customerid left join customerrewards cr on r.typeid = cr.typeid ) x pivot ( count(typeid) for description in (' + @cols + ') ) p ) x1 GROUP BY name with ROLLUP' execute(@query)