2011-10-31 14 views
5

मैं आमतौर पर किसी भी एसक्यूएल प्रश्नों मैं अपने अनुप्रयोगों के लिए की जरूरत है पता लगा सकते हैं, लेकिन मैं हाल ही में एक क्रॉस टैब क्वेरी मैं बनाने की जरूरत है और यदि आप मदद कर सकता है सोच रहा था द्वारा स्टम्प्ड किया गया है?Sql सर्वर 2008 क्रॉस टैब क्वेरी

मैं 3 टेबल

Category(catID, catTitle) 
Equipment(equipID, make, model, quantity, catID, siteID) 
Site(siteID, title) 

है और मैं एक परिणाम की तरह सेट प्रदर्शित करने के लिए एक क्रॉस टैब क्वेरी बनाने के लिए नीचे

Category Site1 Site2 Site3 Site4 Site5 
PC   2  0  10  3  6 
Camera  12  4  2  0  8 
Printer  3  2  1  1  2 

संख्या दिखाया गया के भीतर प्रत्येक श्रेणी के आइटम के कुल का प्रतिनिधित्व करना चाहते हैं उपकरण तालिका के भीतर मात्रा क्षेत्र का उपयोग कर प्रत्येक साइट। मुझे पहले कभी क्रॉस टैब क्वेरी नहीं करना पड़ा था और मैं यह काम करने के लिए संघर्ष कर रहा हूं।

उत्तर

7

आपको इसे 'पिवट' ऑपरेटर के साथ करने में सक्षम होना चाहिए। कुछ इस तरह (हालांकि मुझे यकीन है कि मैं कुछ वर्तनी या वाक्य रचना विवरण ... muffed हूँ):

select catTitle, [1] as site1, [2] as site2, [3] as site3, [4] as site4, [5] as site5 
    from (select category.catTitle, equipment.quantity, site.title 
      from equipment 
      inner join site 
       on (equipment.siteid = site.siteid) 
      inner join category 
       on (category.catid = equipment.catid) 
     ) 
    pivot 
    (
    sum (quantity) 
    for equipment.siteid in ([1], [2], [3], [4], [5]) 
) as pvt 
order by pvt.category; 

इस के साथ समस्या यह है कि आप साइट आईडी का सही सेट आप क्वेरी में शामिल करना चाहते हैं पता करने की जरूरत है । यदि आपको अधिक गतिशील क्रॉसस्टैब की आवश्यकता है (जैसे आप एक्सेल में प्राप्त कर सकते हैं), तो आपको स्ट्रिंग के रूप में क्वेरी टेक्स्ट जेनरेट करने और इसे चलाने के लिए sp_executesql का उपयोग करने की आवश्यकता है। जेनरेट किए गए टेक्स्ट में, आप "[1], [2], [3], [4], [5] ..." और "[1] साइट 1 के रूप में, [2] साइट 2 के रूप में शामिल हैं .. "चीजें जो आपको चाहिए।

+0

यह सुपर रे है। आपकी सहायता के लिए धन्यवाद। – tgriffiths

2

मैं अपने एक मेज है कि इस तरह

कुछ अपनी साइट और उपकरणों के बीच एक संदर्भ बनाने के लापता लगता है:

EquipmentSite(SiteID, EquipID) 

क्योंकि अब यह जो उपकरण

संपादित के रूप में जो साइट बताने के लिए असंभव है :

के बाद से siteID उपकरण में भी है मैं एक तालिका आप डेटाबेस का एक छोटा refactor का प्रस्ताव होता है, (क्योंकि मैं वास्तव में नहीं जानता कि ऐसा करने के तरीके)

आप डेटा का एक बहुत मिलता है, तो यह डेटा लाने और हर चीज हर बार जब आप उन डेटा का उपयोग करना चाहते हैं की गणना करने के एक मेस होगा।

तो मैं इस तालिका

siteCatCount(CatID, siteID, cnt) 

तो जब आप को संशोधित आप डेटा (जोड़ सकते हैं या उपकरण निकालने के लिए) आप इस तालिका को अपडेट जाना होगा, यह बहुत स्पष्ट हो सकता है और आप अभ्यस्त हर की गिनती की गणना करने के लिए है का प्रस्ताव उपकरण हर बार

+0

माफी माँगता है। वह एक टाइपो था, उपकरण तालिका में साइट आईडी फ़ील्ड भी है। – tgriffiths

+0

हाँ साइट साइट के साथ भी यह एक गड़बड़ है :) – GregM