मेरे पास निम्नलिखित कॉलम वाली एक टेबल है:

GLLink int
Budget01 float
Budget02 float
Budget03 float
Budget04 float
Budget05 float
Budget06 float
Budget07 float
...
Budget57 float
Budget58 float
Budget59 float
Budget60 float

मेरे फ़िल्टर के कारण प्रत्येक कॉलम के लिए 8 पंक्तियाँ हैं।

इन सभी स्तंभों में मान हैं।

मुझे प्रत्येक कॉलम मान को शून्य पर सेट करने की आवश्यकता है, हालांकि मुझे समझ है कि मुझे डेटा को पिवट करने और बाद में अपडेट करने की आवश्यकता होगी?

मुझे पता है कि आप एक्सेल में केवल transpose परिणाम प्राप्त कर सकते हैं और फिर एक्सेल में आपको क्वेरी विकसित कर सकते हैं, हालांकि, मैं जानना चाहता हूं कि एक्सेल का उपयोग किए बिना इसे कैसे प्राप्त किया जाए।

एक्सेल में स्थानांतरण के बाद, मेरी अद्यतन क्वेरी इस तरह दिखेगी:

update Budgets set Budget01 = 0 where GLLink in (select AccountLink from Accounts where Master_Sub_Account like '3200>%')
update Budgets set Budget02 = 0 where GLLink in (select AccountLink from Accounts where Master_Sub_Account like '3200>%')
update Budgets set Budget03 = 0 where GLLink in (select AccountLink from Accounts where Master_Sub_Account like '3200>%')
update Budgets set Budget04 = 0 where GLLink in (select AccountLink from Accounts where Master_Sub_Account like '3200>%')
update Budgets set Budget05 = 0 where GLLink in (select AccountLink from Accounts where Master_Sub_Account like '3200>%')
update Budgets set Budget06 = 0 where GLLink in (select AccountLink from Accounts where Master_Sub_Account like '3200>%')
update Budgets set Budget07 = 0 where GLLink in (select AccountLink from Accounts where Master_Sub_Account like '3200>%')
...
update Budgets set Budget57 = 0 where GLLink in (select AccountLink from Accounts where Master_Sub_Account like '3200>%')
update Budgets set Budget58 = 0 where GLLink in (select AccountLink from Accounts where Master_Sub_Account like '3200>%')
update Budgets set Budget59 = 0 where GLLink in (select AccountLink from Accounts where Master_Sub_Account like '3200>%')
update Budgets set Budget60 = 0 where GLLink in (select AccountLink from Accounts where Master_Sub_Account like '3200>%')

एक्सेल का उपयोग किए बिना और उपरोक्त सभी को ध्यान में रखे बिना मुझे उसी अद्यतन क्वेरी को SQL में कैसे विकसित करने की आवश्यकता होगी?

1
Birel 17 जिंदा 2019, 11:52

1 उत्तर

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

उन सभी पर शासन करने के लिए एक अद्यतन का उपयोग करें

update Budgets 
set 
Budget01 = 0,
Budget02 = 0,  
Budget03 = 0,  
...
Budget59 = 0,
Budget60 = 0
where GLLink in (select AccountLink from Accounts where Master_Sub_Account like '3200>%')

या डायनेमिक SQL का उपयोग करें

उदाहरण:

declare @Cols NVARCHAR(max);
declare @DynSql NVARCHAR(max);

SELECT @Cols = concat(@Cols+', ',char(10), Col.Name, '=0')
FROM SYS.OBJECTS Obj
JOIN SYS.COLUMNS Col ON Obj.OBJECT_ID = Col.OBJECT_ID
WHERE Obj.TYPE='U' 
  AND Obj.NAME = 'Budgets'
  AND Col.Name LIKE 'Budget[0-9][0-9]';

set @DynSql = N'update Budgets set '+ @Cols + char(10) +
'where GLLink in (select AccountLink from Accounts where Master_Sub_Account like ''3200>%'')';

exec(@DynSql);

db<>fiddle यहां पर टेस्ट करें

1
LukStorms 17 जिंदा 2019, 12:50