मैं वर्तमान पंक्ति में अगली पंक्ति मान प्राप्त करना चाहता हूं। जैसे LEAD() नवीनतम SQL सर्वर में करता है। लेकिन मैं वर्तमान में SQL Server 2000 का उपयोग कर रहा हूं। और मेरे पास कोई अन्य विकल्प नहीं है।

वास्तविक परिदृश्य है:

तालिका नियम:

#   HeadNo | NextHeadNo |     NoFrom
-----------+------------+------------
1    AA    |    AB      |        1
2    AB    |    AC      |        1
3    AC    |    AX      |        1
4    AD    |    AE      |        1   ****and so on

मैं HeadNo पर अगले मान के आधार पर NextHeadNo मान अपडेट करना चाहता हूं।

तो डेटा के अनुसार Row-3 को अपडेट AX ➪ AD मिलना चाहिए।

मेरे पास एक बार में अपडेट करने के लिए लगभग 1000 रिकॉर्ड हैं।

मुझे उम्मीद है कि कोई इसमें मेरी मदद कर सकता है।

1
Irfan 14 फरवरी 2019, 08:51

1 उत्तर

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

आप सबक्वायरी का उपयोग करके निम्नलिखित की तरह कोशिश कर सकते हैं।

SELECT *, 
       (SELECT TOP 1 headno 
        FROM   @table T2 
        WHERE  T2.headno > T1.headno 
        ORDER  BY headno) NextHeadNo 
FROM   @table T1 
ORDER  BY headno 

ऑनलाइन डेमो

अपडेट करने के लिए, आप निम्न की तरह कोशिश कर सकते हैं।

UPDATE T1 SET NextHeadNo= 
       (SELECT TOP 1 headno 
        FROM   @table T2 
        WHERE  T2.headno > T1.headno 
        ORDER  BY headno)  
FROM   @table T1

संपादित करें:

लेकिन अंतिम पंक्ति में NULL हो रहा है, इसलिए मैं इसका संदर्भ पहली पंक्ति में देना चाहता हूं। मैं वह कैसे कर सकता हूं?

मेरा सुझाव है कि आप निम्नलिखित की तरह CASE WHEN लिखने के बजाय एक अलग अद्यतन विवरण लिखें।

update t
set t.NextHeadNo =
 (
  select top 1 HeadNo from @table order by HeadNo
 )
from @table t
where t.NextHeadNo is null
1
PSK 14 फरवरी 2019, 09:38