मुझे आशा है कि आप इन दिनों बहुत अच्छा कर रहे हैं। मुझे निम्नलिखित समस्या है और आपकी सलाह और समर्थन के लिए मैं बहुत आभारी रहूंगा:

[दिया गया] मेरे पास PostgreSQL में इस तरह की एक तालिका है जिसमें 3 प्रारंभिक कॉलम हैं जिन्हें प्रोजेक्ट, आकार और स्टार्टडेट कहा जाता है (नीचे देखें):

परियोजना ----/---- आकार--/----प्रारंभ दिनांक

प्रोजेक्ट1---/----- 88 ---/---2020-06-15

प्रोजेक्ट2 ---/----- 105 ---/--2020-03-01

मुझे प्रारंभ दिनांक स्तंभ के आगे 12 स्तंभ जोड़ने और प्रारंभिक तालिका को 15 स्तंभों तक विस्तारित करने की आवश्यकता है। सभी नए कॉलम दिए गए वर्ष (२०२०) के लिए महीनों का प्रतिनिधित्व करते हैं, और उनमें आकार और स्टार्टडेट कॉलम से प्राप्त सशर्त तर्क के आधार पर ० और मूल्यों की गणना की जाएगी। शर्त निम्न है: यदि प्रारंभ दिनांक किसी विशिष्ट महीने से संबंधित है, तो उस महीने को एक मान = आकार मिलता है और उसके बाद प्रत्येक अगले महीने के लिए मान = मान -50 से मान> 0 तक। कृपया नीचे अपेक्षित परिणाम देखें:

परियोजना ----/---- आकार--/----प्रारंभ दिनांक--/--जनवरी--/- फरवरी--/-- मार्च--/- अप्रैल--/-- माई /--जून--/--जुलाई----/--अगस्त--/--सितंबर--/--अक्टूबर--/--नवंबर-/--दिसंबर--/

प्रोजेक्ट1---/----- 88 ---/---2020-05-15/-------/-------//---0--- //----0---//---88--//---38--//---0----//---0---//-- -0-----/---0----//---0----/---0----/

प्रोजेक्ट २---/----- १०५ ---/---२०२०-०३-०१/---०---/-------//-105-//-- 55---//---5---//---0----//---0----/---0----//---0- ---/---0----//---0----/---0----/

मुझे आशा है कि मैं अपने मुद्दे की व्याख्या कर सकता हूं। आप मेरे साथ साझा कर सकते हैं किसी भी सलाह और समर्थन के लिए आभारी होंगे।

अग्रिम में बहुत धन्यवाद।

0
S Karabed 19 मार्च 2020, 18:17

1 उत्तर

सबसे बढ़िया उत्तर

यह बहुत सारे CASE भावों के साथ किया जा सकता है:

SELECT project,
       size,
       startdate,
       CASE WHEN mon < 2
            THEN greatest(size - 50 * (1 - mon), 0)
            ELSE 0
       END AS jan,
       CASE WHEN mon < 3
            THEN greatest(size - 50 * (2 - mon), 0)
            ELSE 0
       END AS feb,
       CASE WHEN mon < 4
            THEN greatest(size - 50 * (3 - mon), 0)
            ELSE 0
       END AS mar,
       CASE WHEN mon < 5
            THEN greatest(size - 50 * (4 - mon), 0)
            ELSE 0
       END AS apr,
       CASE WHEN mon < 6
            THEN greatest(size - 50 * (5 - mon), 0)
            ELSE 0
       END AS may,
       CASE WHEN mon < 7
            THEN greatest(size - 50 * (6 - mon), 0)
            ELSE 0
       END AS jun,
       CASE WHEN mon < 8
            THEN greatest(size - 50 * (7 - mon), 0)
            ELSE 0
       END AS jul,
       CASE WHEN mon < 9
            THEN greatest(size - 50 * (8 - mon), 0)
            ELSE 0
       END AS aug,
       CASE WHEN mon < 10
            THEN greatest(size - 50 * (9 - mon), 0)
            ELSE 0
       END AS sep,
       CASE WHEN mon < 11
            THEN greatest(size - 50 * (10 - mon), 0)
            ELSE 0
       END AS oct,
       CASE WHEN mon < 12
            THEN greatest(size - 50 * (11 - mon), 0)
            ELSE 0
       END AS nov,
       CASE WHEN mon < 13
            THEN greatest(size - 50 * (12 - mon), 0)
            ELSE 0
       END AS dec
FROM (SELECT project,
             size,
             startdate,
             extract(month FROM startdate) AS mon
      FROM mytable) AS q;
0
Laurenz Albe 19 मार्च 2020, 20:22