इससे पहले कि आप इस तरह पिवट कर सकें, आपको कुछ और काम करने की ज़रूरत है, क्योंकि पिवोटिंग पंक्ति डेटा लेता है और इसे कॉलम नामों में बनाता है, लेकिन आपका कोई भी पंक्ति डेटा 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
का उपयोग करना होगा उनका नाम बदलने के लिए