2010-10-07 15 views
6

कस्टम फ़ंक्शंस का उपयोग किए बिना, SQLite में निम्न कार्य करना संभव है। मेरे पास दो टेबल हैं, जो सामान्य आईडी संख्याओं के माध्यम से जुड़े हुए हैं। दूसरी तालिका में, दो चर हैं। मैं क्या करना चाहता हूं, परिणामों की एक सूची वापस करने में सक्षम होना चाहिए, जिसमें पंक्ति आईडी और न्यूल शामिल हैं यदि उन दो चर के सभी उदाहरण (और दो से अधिक हो सकते हैं) न्यूल हैं, 1 यदि वे सभी 0 हैं और 2 यदि एक या अधिक 1."अगर, फिर, अन्यथा" SQLite

क्या मैं अभी इस प्रकार होता है:


SELECT 
    a.aid, 
    (SELECT count(*) from W3S19 b WHERE a.aid=b.aid) as num, 
    (SELECT count(*) FROM W3S19 c WHERE a.aid=c.aid AND H110 IS NULL AND H112 IS NULL) as num_null, 
    (SELECT count(*) FROM W3S19 d WHERE a.aid=d.aid AND (H110=1 or H112=1)) AS num_yes 
FROM W3 a 

तो यह क्या आवश्यकता है के रूप में (किसी न किसी अजगर स्यूडोकोड) इस प्रकार प्रत्येक परिणाम से निकलने के लिए:


if row['num_yes'] > 0: 
    out[aid] = 2 
elif row['num_null'] == row['num']: 
    out[aid] = 'NULL' 
else: 
    out[aid] = 1 

क्या कोई आसान तरीका है? धन्यवाद!

उत्तर

23

CASE...WHEN का उपयोग करें, उदा।

CASE x WHEN w1 THEN r1 WHEN w2 THEN r2 ELSE r3 END 

और पढ़ें SQLite syntax manual से (अनुभाग के लिए "मामला अभिव्यक्ति" जाना)।

+0

उत्कृष्ट, इसके लिए धन्यवाद! –

1

संख्यात्मक मानों के लिए एक और तरीका है, जो कुछ विशिष्ट मामलों के लिए आसान हो सकता है। यह तथ्य यह है कि बूलियन मान 1 या 0 है पर आधारित है, "हालत अगर" एक बूलियन परिणाम देता है:

(यह केवल हालत के लिए "या" काम करेंगे उपयोग पर निर्भर करता है)

SELECT (w1=TRUE)*r1 + (w2=TRUE)*r2 + ... 

बेशक @ ईवन का जवाब सामान्य उद्देश्य है, सही उत्तर

संबंधित मुद्दे