2009-11-25 8 views
7

सुनिश्चित नहीं हैं कि वास्तव में यह कैसे व्याख्या करने के लिए, लेकिन आप इस तरह बूलियन क्षेत्रों के बहुत सारे के साथ एक मेज है इमेजिंग ......एक एसक्यूएल क्वेरी में बहुत सारे बूलियन फ़ील्ड के लिए मायने रखता है?

तालिका: कारें

कॉलम:

स्वत: बूलियन

चांदी: बूलियन

अमेरिकी: बूलियन

शोर: बूलियन

Smelly: बूलियन

तेजी: बूलियन

(मूर्ख खेतों और उनमें से ज्यादातर वास्तव में bools लेकिन सिर्फ एक उदाहरण नहीं होगा)

क्या मैं करने की आवश्यकता है इन क्षेत्रों की एक सूची प्रत्येक के बगल में कई खोज परिणामों के साथ, इसलिए यदि डेटाबेस में 100 रजत कारें थीं और 57 अमेरिकी कारें सूची इस तरह दिख सकती हैं ...

स्वत: (150)

चांदी (100)

अमेरिकी (57)

शोर (120)

Smelly (124)

तेजी से (45)

तो, यह मूल रूप से फाई की एक सूची की तरह है lters, यदि उपयोगकर्ता "चांदी" पर क्लिक करता है तो वे केवल चांदी की कारों को दिखाने के लिए खोज को सीमित कर देंगे और उन्हें पता होगा कि उन्हें 100 परिणाम मिलेंगे। अन्य सभी फ़िल्टरों के बगल में संख्याएं तब घट जाएंगी क्योंकि हमने उन सभी कारों को फ़िल्टर किया है जो चांदी नहीं हैं।

एक क्षेत्र की आवृत्तियां गिनती आसान होगा ....

COUNT का चयन करें (*) कारों से जहां स्वत: = true

... उदाहरण के लिए मुझे पहली पंक्ति देगी। लेकिन मैं प्रत्येक फिल्टर के लिए एक एसक्यूएल कथन नहीं करना चाहता क्योंकि उनमें से 30 से अधिक हो सकते हैं। मैंने देखा है कि बहुत सारी साइटें ऐसा करती हैं, इसलिए मुझे लगता है कि यह आसान होना चाहिए।

किसी भी मदद वास्तव में सराहना की जाएगी :)

जॉन

उत्तर

6

मान लिया जाये कि बिट 1/0 तो आप COUNT के बजाय जोड़ सकते हैं है: अगर यह पहले से ही 1/0 नहीं है

SELECT SUM(Automatic) as Automatic, SUM(Smelly) as Smelly, SUM(American) as Japanese FROM ... 
+0

सही लग रहा है। धन्यवाद। – jonhobbs

3

, फिर, जो भी सत्यव्यू है, उसके आधार पर, आप यह कर सकते हैं:

Select 
    Sum(Case When Automatic = truevalue Then 1 Else 0 End) as Automatic, 
    Sum(Case When Smelly = truevalue Then 1 Else 0 End) as Smelly, 
    Sum(Case When American = truevalue Then 1 Else 0 End) as American, 
    Sum(Case When Noisy = truevalue Then 1 Else 0 End) as Noisy 
    From Table 
12

एसक्यूएल सर्वर 2008 के साथ

संदेश 8117, स्तर 16, राज्य 1, रेखा 10

ओपेरैंड डेटा प्रकार बिट राशि ऑपरेटर के लिए अमान्य है: n डेटा प्रकार बिट के एक क्षेत्र निम्न त्रुटि ocures योग करने के लिए कोशिश कर रहा।

ताकि आप यह कोशिश कर सकते हैं:

SELECT SUM(CAST(Automatic AS TINYINT)) as Automatic, SUM(CAST(Smelly AS TINYINT)) as Smelly, SUM(CAST(American AS TINYINT)) as Japanese FROM YourTable 
संबंधित मुद्दे