मैं विश्लेषण के लिए टेराडेटा तालिका से सेंसर डेटा खींच रहा हूं। नीचे तालिका कैसी दिखती है। यहां छवि विवरण दर्ज करें

मैं इसे इस तरह पिवट करना चाहता हूं कि सेंसर के नाम कॉलम बन जाएं। यहां छवि विवरण दर्ज करें

सौ से अधिक सेंसर हैं और इस प्रकार पिवट के बाद मैट्रिक्स में कई कॉलम हैं। अंतिम परिणाम सेट काफी विरल होगा क्योंकि सभी सेंसर में सभी तिथियों के लिए मान नहीं होते हैं। मैं एकत्रीकरण के बिना तालिका को कैसे पिवट करूं?

0
ddd 2 अगस्त 2019, 18:55

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 joins से थोड़ा बेहतर प्रदर्शन करता है।

1
Gordon Linoff 2 अगस्त 2019, 20:01

आप 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'
1
Lukasz Szozda 2 अगस्त 2019, 19:01