select count(patientNUM) as totalpatients
from [dbo] (nolock)
where patientId in (
'97210219',
'97210221',
'97210222'
)

50
100
20

तो प्रत्येक रोगी आईडी में 100, 20 या 50 रोगियों की संख्या होती है। और मैं प्रत्येक रोगी पंक्तियों के माध्यम से जाना चाहता हूं और उन्हें आंशिक या पूर्ण के रूप में खोना चाहता हूं। उदाहरण के लिए यदि ५० में से ४० रोगी आईडी पंक्तियाँ हैं, तो यह आंशिक के रूप में सूचीबद्ध होगी। यदि 50 है, तो यह पूर्ण के रूप में सूचीबद्ध होगा। गिनती या एक ही समय में उपयोग करने का कोई तरीका है?

तो मूल रूप से मैं दूसरे कॉलम में दो कॉलम, रोगी आईडी, और पूर्ण आंशिक बनाना चाहता हूं।

क्या प्रत्येक पंक्ति के माध्यम से जाने और प्रत्येक पंक्तियों को गिनने और फिर दूसरे कॉलम में परिणाम की तुलना करने का कोई तरीका है?

0
Jared 4 नवम्बर 2020, 10:21

2 जवाब

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

आपको "क्षमता" के साथ-साथ patientId जानने की आवश्यकता है। मैं एक व्युत्पन्न तालिका का सुझाव दूंगा:

select t.patientId,
       (case when count(*) < v.capacity then 'partial'
             when count(*) = v.capacity then 'full'
        end) as full_or_partial
from t join
     (values ('97210219', 50),
             ('97210221', 100),
             ('97210222', 20)
     ) v(patientId, capacity)
     on v.patientId = t.patientId
group by t.patientId;
0
Gordon Linoff 4 नवम्बर 2020, 16:18

चूंकि मुझे नहीं पता कि आपका डेटा वास्तव में कैसा दिखता है और आप क्या चाहते हैं। लेकिन इसे आजमाएं:

over का उपयोग करना एक अच्छा विकल्प है

select patientId,count(patientNUM) over(partition by patientId) as totalpatients
from [dbo] (nolock)
where patientId in (
'97210219',
'97210221',
'97210222'
)

यह प्रत्येक रोगी आईडी के लिए रोगी NUM मौजूद समय की गणना करेगा।

और 'पार्टियलोरफुल' कॉल के बारे में मुझे लगता है कि case का उपयोग करके हासिल किया जा सकता है

case
when patientId = '97210219' and totalpatients < 50 then 'partial'
when ......   --condition keep going on
else 'full'
end as partialorfull
0
T. Peter 4 नवम्बर 2020, 11:18