दिलचस्प पोस्ट
मैं प्रक्रिया में शुरुआती इनपुट कैसे पाइप कर सकता हूं, जो फिर इंटरैक्टिव होगा? C2DM कार्यान्वयन PHP कोड jQuery .val () बनाम .attr ("मान") रिटर्निंग आईईइन्मेरेबल <T> बनाम IQueryable <T> जावा में Enum पर स्विच करें अनुमति अस्वीकृति अपवाद प्राप्त करना GOPATH और GOROOT के मूल्य क्या होना चाहिए? JQuery $ .getScript () विधि का उपयोग करते हुए एकाधिक जेएस फ़ाइलों को कैसे शामिल करें I मैं एंड्रॉइड एप्लिकेशन के सभी बटनों में एक शैली को कैसे लागू करूं? अनुरोध विफल: अस्वीकार्य सामग्री-प्रकार: पाठ / HTML का उपयोग कर AFNetworking 2.0 कैसे एंड्रॉइड सीपीयू गति का पता लगा सकता है? MySQL क्वेरी, मैक्स () + ग्रुप बाय डॉकर डॉकर डेमन से कनेक्ट नहीं हो सकता अगला-जन डेटाबेस कस्टम HTML5 आवश्यक फ़ील्ड सत्यापन संदेश सेट करें

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

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

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 

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

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

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

वेब के समाधान से एकत्रित समाधान "गतिशील स्तंभ एसक्यूएल बनाएँ"

आप इसके लिए एक 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)