Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

एक पंक्ति में एकाधिक पंक्तियों का मान

इससे पहले कि आप इस तरह पिवट कर सकें, आपको कुछ और काम करने की ज़रूरत है, क्योंकि पिवोटिंग पंक्ति डेटा लेता है और इसे कॉलम नामों में बनाता है, लेकिन आपका कोई भी पंक्ति डेटा 1, 2, 3, 4... नहीं है। कॉलम नाम के रूप में उपयोग करने के लिए (inp_value1 <- यहां 1)

आप ऐसा कर सकते हैं, जिसे समझना शायद आसान है:

SELECT
  Empid,
  Ele_name,
  MAX(CASE WHEN rown = 1 THEN Inp_name END) as Inp_name1,
  MAX(CASE WHEN rown = 1 THEN Inp_value END) as Inp_Value1,
  MAX(CASE WHEN rown = 2 THEN Inp_name END) as Inp_name2,
  MAX(CASE WHEN rown = 2 THEN Inp_value END) as Inp_Value2,
  MAX(CASE WHEN rown = 3 THEN Inp_name END) as Inp_name3,
  MAX(CASE WHEN rown = 3 THEN Inp_value END) as Inp_Value3,
  MAX(CASE WHEN rown = 4 THEN Inp_name END) as Inp_name4,
  MAX(CASE WHEN rown = 4 THEN Inp_value END) as Inp_Value4,
  MAX(CASE WHEN rown = 5 THEN Inp_name END) as Inp_name5,
  MAX(CASE WHEN rown = 5 THEN Inp_value END) as Inp_Value5,
  MAX(CASE WHEN rown = 6 THEN Inp_name END) as Inp_name6,
  MAX(CASE WHEN rown = 6 THEN Inp_value END) as Inp_Value6,
  EntryId,     
  Start_date,      
  End_Date
FROM
  (SELECT t2.*, ROW_NUMBER() OVER(PARTITION BY EmpId, Ele_name ORDER BY 1) as rown FROM t2) d
GROUP BY 
  Empid,
  Ele_name, 
  EntryId,     
  Start_date,      
  End_Date
  • पीएस; अपने अपेक्षित आउटपुट में नाम 3/4/5/6 क्यों निर्दिष्ट करें यदि वे सभी शून्य हैं? यदि डेटा में प्रति empid/ele_name जोड़ी 2 से अधिक पंक्तियाँ कभी नहीं होंगी तो आप बस null as input_name3.. लिख सकते हैं और इसी तरह
  • pps:मैंने अपनी तालिका t2 को कॉल किया - क्वेरी में अपना नाम संपादित करें
  • पीपीपी; मुझे नहीं पता कि कॉलम "समाप्ति तिथि" में वास्तव में नाम में एक स्थान है, मैंने मुझे अंडरस्कोर के साथ बुलाया

या आप इस तरह धुरी कर सकते हैं (समझने में कठिन लेकिन अधिक कॉम्पैक्ट):

SELECT
  Empid,
  Ele_name,
  pvt.*,
  EntryId,     
  Start_date,      
  End_Date
FROM
  (SELECT t2.*, ROW_NUMBER() OVER(PARTITION BY EmpId, Ele_name ORDER BY 1) as rown
   FROM t2) d
PIVOT( 
  MAX(inp_name) as inp_name, 
  MAX(inp_value) as inp_value 
  FOR rown in (1,2,3,4,5,6) 
) pvt

लेकिन कॉलम pvt.* . से निकलेंगे 1_inp_name, 1_inp_value जैसे नामों के साथ .. आपको AS का उपयोग करना होगा उनका नाम बदलने के लिए




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ऑरैकल इन क्लॉज में केवल स्थिर डेटा के लिए 1000 की सीमा क्यों है?

  2. Oracle JDBC ojdbc6 जार एक मावेन निर्भरता के रूप में

  3. ऑरैकल में अनुक्रम संख्या के साथ संपूर्ण तालिका को अपडेट करें

  4. लारवेल और ओरेकल कनेक्शन

  5. Rownum का उपयोग करके तालिका की दूसरी पंक्ति का चयन करना