मैं विश्लेषण के लिए टेराडेटा तालिका से सेंसर डेटा खींच रहा हूं। नीचे तालिका कैसी दिखती है।
मैं इसे इस तरह पिवट करना चाहता हूं कि सेंसर के नाम कॉलम बन जाएं।
सौ से अधिक सेंसर हैं और इस प्रकार पिवट के बाद मैट्रिक्स में कई कॉलम हैं। अंतिम परिणाम सेट काफी विरल होगा क्योंकि सभी सेंसर में सभी तिथियों के लिए मान नहीं होते हैं। मैं एकत्रीकरण के बिना तालिका को कैसे पिवट करूं?
2 जवाब
एकत्रीकरण में क्या गलत है?
select timestamp,
max(case when sensor_id = 'sensor1' then val end) as sensor1,
max(case when sensor_id = 'sensor2' then val end) as sensor2,
max(case when sensor_id = 'sensor3' then val end) as sensor3,
. . .
from t
group by timestamp;
यह तर्क को व्यक्त करने का यह सबसे सरल तरीका लगता है। और यह शायद 100 join
s से थोड़ा बेहतर प्रदर्शन करता है।
आप LEFT JOIN
का उपयोग कर सकते हैं:
SELECT DISTINCT t.timestamp, t1.val AS sensor_1, t2.val AS sensor_2, t3.val as sensor_3
FROM (SELECT DISTINCT timestamp FROM tab) t
LEFT JOIN tab t1
ON t.timestamp = t1.timestamp
AND t1.sensor_id = 'sensor1'
LEFT JOIN tab t2
ON t.timestamp = t2.timestamp
AND t2.sensor_id = 'sensor2'
LEFT JOIN tab t3
ON t.timestamp = t3.timestamp
AND t3.sensor_id = 'sensor3'
संबंधित सवाल
नए सवाल
sql
संरचित क्वेरी भाषा (एसक्यूएल) डेटाबेस को क्वेरी करने के लिए एक भाषा है। प्रश्नों में कोड उदाहरण, तालिका संरचना, नमूना डेटा और DBMS कार्यान्वयन के लिए एक टैग (जैसे MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2, आदि) का उपयोग किया जाना चाहिए। यदि आपका प्रश्न केवल एक विशिष्ट DBMS (विशिष्ट एक्सटेंशन / सुविधाओं का उपयोग करता है) से संबंधित है, तो इसके बजाय उस DBMS के टैग का उपयोग करें। एसक्यूएल के साथ टैग किए गए सवालों के जवाब में आईएसओ / आईईसी मानक एसक्यूएल का उपयोग करना चाहिए।