मैं ऐसी स्थिति में हूं जहां मैं 6 कॉलम से न्यूनतम मूल्य प्राप्त करना चाहता हूं।
मैंने इसे पूरा करने के लिए अब तक तीन तरीके खोजे हैं, लेकिन मुझे इन तरीकों के प्रदर्शन से चिंता है और यह जानना चाहूंगा कि प्रदर्शन के लिए कौन सा बेहतर होगा।
पहली विधि एक बड़े मामले के बयान का उपयोग करना है । यहां 3 कॉलम के साथ एक उदाहरण दिया गया है, ऊपर दिए गए लिंक में उदाहरण के आधार पर। मेरा केस स्टेटमेंट बहुत लंबा होगा क्योंकि मैं 6 कॉलम देख रहा हूँ।
Select Id,
Case When Col1 <= Col2 And Col1 <= Col3 Then Col1
When Col2 <= Col3 Then Col2
Else Col3
End As TheMin
From MyTable
दूसरा विकल्प UNION
कई चुनिंदा बयानों के साथ ऑपरेटर का उपयोग करना है । मैं इसे एक यूडीएफ में रखूंगा जो एक आईडी पैरामीटर को स्वीकार करता है।
select Id, dbo.GetMinimumFromMyTable(Id)
from MyTable
तथा
select min(col)
from
(
select col1 [col] from MyTable where Id = @id
union all
select col2 from MyTable where Id = @id
union all
select col3 from MyTable where Id = @id
) as t
और जो तीसरा विकल्प मुझे मिला वह UNPIVOT ऑपरेटर का उपयोग करना था , जिसे मैं अभी तक अस्तित्व में नहीं जानता था
with cte (ID, Col1, Col2, Col3)
as
(
select ID, Col1, Col2, Col3
from TestTable
)
select cte.ID, Col1, Col2, Col3, TheMin from cte
join
(
select
ID, min(Amount) as TheMin
from
cte
UNPIVOT (Amount for AmountCol in (Col1, Col2, Col3)) as unpvt
group by ID
) as minValues
on cte.ID = minValues.ID
तालिका के आकार, और आवृत्ति के कारण जिसमें यह तालिका क्वेरी की गई और अद्यतन की गई है, मैं उन प्रदर्शन प्रभावों के बारे में चिंतित हूं जो इन क्वेरीज़ डेटाबेस पर होंगे।
इस क्वेरी को वास्तव में कुछ मिलियन रिकॉर्ड्स के साथ एक तालिका में शामिल होने के लिए उपयोग किया जाएगा, हालांकि वापस आए रिकॉर्ड एक समय में लगभग सौ रिकॉर्ड तक कम हो जाएंगे। यह पूरे दिन में कई बार चलेगा, और मैं जिन 6 कॉलमों की क्वेरी कर रहा हूं, वे अक्सर अपडेट किए जाते हैं (उनमें दैनिक आँकड़े होते हैं)। मुझे नहीं लगता कि मैं जिस 6 कॉलम पर क्वेरी कर रहा हूं, उस पर कोई इंडेक्स नहीं है।
एकाधिक स्तंभों में से न्यूनतम प्राप्त करने का प्रयास करते समय इनमें से कौन सी विधि बेहतर है? या फिर एक और बेहतर तरीका है जो मुझे नहीं पता है?
मैं SQL Server 2005 का उपयोग कर रहा हूं
नमूना डेटा और परिणाम
यदि मेरे डेटा में इस तरह के रिकॉर्ड हैं:
Id Col1 Col2 Col3 Col4 Col5 Col6 1 3 4 0 2 1 5 २ २ ६ १० ५। ९ 3 1 1 2 3 4 5 ४ ९ ५ ४ ६। ९
अंतिम परिणाम होना चाहिए
आईडी मान १ ० २ २ ३ १ ४ ४
Year1
परिणाम के रूप में वापस आ जाएगा , जो कि आवश्यक नहीं है कि सही हो।