दिलचस्प पोस्ट
सीएसएस का उपयोग करते हुए सर्कल में पाठ का अनुच्छेद उत्तरदायी सीएसएस सर्किल वेब। कॉन्फिग प्रोग्राम को संपादित करना कुछ परिस्थितियों में आवश्यक सत्यापन विशेषता अक्षम करें jQuery AJAX वर्ण एन्कोडिंग स्क्रीन पर माउस स्थान के आसपास क्षेत्र के लिए ज़ूम बॉक्स पायथन 3 के "फंक्शन एनोटेशन" के लिए अच्छे उपयोग क्या हैं PHP में सरणी मानों की सफेद रिक्त स्थान कैसे ट्रिम करें कांगार 2 एनजीएमोडेल का उपयोग करके दो तरह से बाध्यकारी काम नहीं कर रहा है सी ++ टेम्पलेट्स स्पेशलाइज़ेशन सिंटैक्स पायथन में डिक्ट्स के एक अक्षर को प्रारंभ करने का सबसे अच्छा तरीका क्या है? फेसबुक एपीआई में आंतरायिक लापता ईमेल पता PHP में क्लाइंट लोकेल का पता लगाने का सबसे सरल तरीका NotifyIcon के संदर्भ मेनू को आमंत्रित करें सिस्टम दिनांक और समय बदलने के लिए पायथन मॉड्यूल

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

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

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)