मेरे पिछले प्रश्न का उत्तर दिया गया है (यहां< /a>), लेकिन मैं इसे विस्तारित करना चाहूंगा। भ्रम से बचने के लिए मैं इसे इस प्रश्न में पूछता हूं:

मेरे पास असफल परीक्षण के साथ एक SQL तालिका है:

Run           Test              StartTime              Result
1             20                2020-01-01 00:01       Failed
1             20                2020-01-01 00:00       NotExecuted
1             20                2020-01-01 00:04       Timeout
2             21                2020-01-01 00:10       Failed
2             21                2020-01-01 00:03       Failed

यह तालिका मुझे बता रही है कि परीक्षण विफल हो गया है, लेकिन मैं जानना चाहता हूं कि यह पहला, दूसरा या तीसरा परीक्षण है या नहीं। मैं यह भी जानना चाहता हूं कि मैं कौन सी परीक्षा देख रहा हूं। बड़े अक्षरों का उपयोग करना एक उचित विचार लगता है, जब तक परिणाम में प्रत्येक मान एक अलग प्रारंभिक अक्षर के रूप में होता है, और अभी के लिए ऐसा ही है। हालाँकि मैं अन्य विचारों के लिए खुला हूँ।

Run           Test              StartTime              Result          ResultStatus
1             20                2020-01-01 00:01       Failed          nFt
1             20                2020-01-01 00:00       NotExecuted     Nft
1             20                2020-01-01 00:04       Timeout         nfT
2             21                2020-01-01 00:10       Failed          fF
2             21                2020-01-01 00:03       Failed          Ff

दूसरे प्रश्न के उत्तर में बताए अनुसार प्रतिकृति फ़ंक्शन का उपयोग करते समय, मैं अधिक परिणाम परिणामों को कैसे माप सकता हूं?

0
Japie07 29 सितंबर 2020, 16:41

1 उत्तर

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

अगर मैं सही ढंग से समझूं, तो आप इसे string_agg() का उपयोग करके बना सकते हैं:

select t.*,
       string_agg(lower(left(result, 1)), '') within group (order by starttime) over (partition by run, test) as resultstatus
from t;

दुर्भाग्य से, SQL सर्वर विंडो फ़ंक्शन के रूप में string_agg() का समर्थन नहीं करता है। तो चलिए एक सबक्वायरी का उपयोग करते हैं:

select t.*,
       (select string_agg(lower(left(t2.result, 1)), '') within group (order by t2.starttime) 
        from t t2
        where t2.run = t.run and t2.test = t.test
       ) as resultstatus
from t;

वर्तमान परीक्षण को अपर-केस करना मुश्किल है। यहाँ एक विधि है:

select t.*,
       stuff(rs, seqnum, 1, left(result, 1)) as resultstatus
from (select t.*,
             (select string_agg(lower(left(t2.result, 1)), '') within group (order by t2.starttime) 
              from t t2
              where t2.run = t.run and t2.test = t.test
             ) as rs,
             row_number() over (partition by run, test order by starttime) as seqnum
      from t
     ) t;

यहां एक db<>fiddle है।

3
Gordon Linoff 29 सितंबर 2020, 16:56