मेरे पास एन कॉलम के साथ एक तालिका है। आइए उन्हें c1
, c2
, c3
, c4
, ... cN
पर कॉल करें। कई पंक्तियों में से, मैं प्रत्येक एक्स के लिए [1, एन] में COUNT DISTINCT(cX)
के साथ एक पंक्ति प्राप्त करना चाहता हूं।कॉलम सूचीबद्ध किए बिना, प्रत्येक कॉलम पर समान एकत्रीकरण कैसे करें?
c1 | c2 | ... | cn
0 | 4 | ... | 1
क्या कोई तरीका है कि मैं इसे प्रत्येक कॉलम नाम मैन्युअल रूप से क्वेरी में लिखने के बिना (संग्रहीत प्रक्रिया में) कर सकता हूं?
क्यों?
हमें एक समस्या है जहां एप्लिकेशन सर्वर में कीड़े का मतलब है कि हम बाद में कचरे के साथ अच्छे कॉलम मानों को फिर से लिखते हैं। इसे हल करने के लिए, मैं सूचना लॉग-संरचना संग्रहीत कर रहा हूं, जहां प्रत्येक पंक्ति तार्किक UPDATE
क्वेरी का प्रतिनिधित्व करती है। फिर, जब एक संकेत दिया गया कि रिकॉर्ड पूरा हो गया है, तो मैं यह निर्धारित कर सकता हूं कि कोई मान (गलती से) ओवरराइट किया गया था या नहीं।
एकाधिक पंक्तियों में एक एकल सही रिकॉर्ड का एक उदाहरण: प्रत्येक कॉलम के लिए अधिकतम एक मूल्य है।
| id | initialize_time | start_time | end_time |
| 1 | 12:00am | NULL | NULL |
| 1 | 12:00am | 1:00pm | NULL |
| 1 | 12:00am | NULL | 2:00pm |
Reconciled row:
| 1 | 12:00am | 1:00pm | 2:00pm |
एक कट्टर विरोधी रिकॉर्ड है कि मैं पता लगाने के लिए चाहते हैं का एक उदाहरण:
| id | initialize_time | start_time | end_time |
| 1 | 12:00am | NULL | NULL |
| 1 | 12:00am | 1:00pm | NULL |
| 1 | 9:00am | 1:00pm | 2:00pm | -- New initialize time => irreconcilable!
क्या आप कॉलम नाम लाने के लिए पूछ रहे हैं, या एकत्रीकरण कैसे करें? –
मुझे पता है कि कॉलम नाम कैसे प्राप्त करें, लेकिन मुझे नहीं पता कि क्वेरी में प्रत्येक कॉलम नाम के चारों ओर एक अभिव्यक्ति का विस्तार करने के लिए क्या करना है। मैं अपनी संग्रहित प्रक्रिया में 'SELECT COUNT DISTINCT (c1), COUNT DISTINCT (c2), ..., COUNT DISTINCT (cN) से बचना चाहता हूं ... ' –
आप इसे गतिशील एसक्यूएल के साथ कर सकते हैं। वैसे, एक्स कितना बड़ा है? – dezso