मेरे पास एक कॉलम वाला एक टेबल है जिसमें अल्पविराम से अलग संख्याएं हैं। मैं प्रत्येक रिकॉर्ड के लिए सभी नंबरों को एक साथ जोड़ना चाहता हूं। spexecuteSQL का उपयोग करके मुझे यह अब तक मिल गया है, लेकिन यह अभी भी क्षेत्र का मूल्यांकन नहीं कर रहा है। मैं यह कैसे करु?

उदा. फ़ील्ड '4,5,5' है जिसे 4+5+5 में स्थानांतरित किया जाता है लेकिन मूल्यांकन करना और ---> 14 प्राप्त करना चाहते हैं

declare @com as nvarchar(100)
set @com= 'select replace(class_historyTY,'','',''+'') from #aety1'

exec sp_executesql @com
1
user9930055 30 जुलाई 2018, 09:55
"4+5+5" का "गणित स्ट्रिंग" बनाने से काम नहीं चलेगा। आपको अपना '4,5,5' लेने के लिए एक स्प्लिट फ़ंक्शन के लिए चारों ओर खोजना होगा और इसे 3 पंक्तियां बनाना होगा, और फिर उस कॉलम पर योग() का उपयोग करना होगा
 – 
George Menoutis
30 जुलाई 2018, 09:57
आप केवल ADD को सही करना चाहते हैं? या आपके पास प्रदर्शन करने के लिए अधिक जटिल अस्थमा रोगी हैं?
 – 
Squirrel
30 जुलाई 2018, 10:10

2 जवाब

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

यदि आपके पास SQL ​​​​सर्वर 2016 है, तो निम्नलिखित कार्य करना चाहिए:

select name, sum(cast(t.value as int)) from
(select name, cs.Value
from details
cross apply STRING_SPLIT (name, ',') cs) t
group by name

जहां मेरी तालिका दिखती है:

details
---------------
name
--------------
1,2,3,4
---------------
10,20,30

नतीजा:

 name | 
 1,2,3,4 | 10
 10,20,30 | 60
2
Josef Biehler 30 जुलाई 2018, 10:03

जैसा कि जोसेफ द्वारा सुझाया गया क्रॉस आवेदन ऐसा करने का सही तरीका है, आपने sp_executesql के साथ एक समाधान निकाला है:

Declare @s nvarchar(max) = 'select ' 
                + (select replace(class_historyTY,',','+')  from #aety1) 
exec sp_executesql  @s

यहाँ विचार यह है कि अपनी योग स्ट्रिंग को पहले 4+5+5 बनाएं और इसे चुनिंदा कथन में लपेटें और वह अभिव्यक्ति select 4+5+5 sp_executesql को पास कर दी जाए।

1
Rafal 30 जुलाई 2018, 10:10