2013-04-05 6 views
8

मैं टीएसक्यूएल में FOR XML PATH('') का उपयोग करके एक विशिष्ट कॉलम द्वारा कॉलम मानों को समूहबद्ध करने का प्रयास कर रहा हूं। (ध्यान देंटीएसक्यूएल: एक्सएमएल पाथ ('') के लिए विफल होने के लिए

Class   |  Animals 
================================= 
Asteroidea  |  Starfish 
Mammalia  |  Dog 
Mammalia  |  Cat 
Mammalia  |  Coyote 
Reptilia  |  Crocodile 
Reptilia  |  Lizard 

अनुसार this article और this article है कि दूसरे लेख बाहर छोड़ देता है: यह दोनों ही मामलों में परिणाम (-: - SELECT * FROM @xml में ही है के रूप में XML कोड के साथ यानी ध्यान दें कि एक्सएमएल बिना कोड) है - GROUP BY, जो मैं अनिश्चित कैसे लेखक इसके बिना इस पुल करने में कामयाब रहा हूँ मैं कोशिश की है और यह केवल सभी मूल्यों को उत्पन्न करता है), वाक्य रचना के रूप में इस नीचे दिखाया जाना चाहिए:

DECLARE @xml TABLE(
    Animal VARCHAR(50), 
    Class VARCHAR(50) 
) 

INSERT INTO @xml 
VALUES ('Dog','Mammalia') 
    , ('Cat','Mammalia') 
    , ('Coyote','Mammalia') 
    , ('Starfish','Asteroidea') 
    , ('Crocodile','Reptilia') 
    , ('Lizard','Reptilia') 

SELECT x1.Class 
    , STUFF((SELECT ',' + x2.Animal AS [text()] 
    FROM @xml x2 
    WHERE x1.Animal = x2.Animal 
    ORDER BY x2.Animal 
    FOR XML PATH('')),1,1,'') AS "Animals" 
FROM @xml x1 
GROUP BY Class 

में कुछ करने के बाद घंटे, इन उदाहरणों और उपर्युक्त कोड के बीच, मैं यह देखने में असफल रहा कि मैं वाक्यविन्यास पर गलत कहां हूं, लेकिन मुझे एर प्राप्त हो रहा है रोर "कॉलम '@ xml.Animal' चुनिंदा सूची में अमान्य है क्योंकि यह या तो कुल कार्य या ग्रुप बाय क्लॉज में निहित नहीं है।" ध्यान दें कि यदि मैं ग्रुप बाय क्लॉज को छोड़ देता हूं, तो यह अभी भी उचित तरीके से मूल्यों का उत्पादन नहीं करता है। आंखों का एक और सेट उपयोगी होगा।

उत्तर

9

मुझे लगता है कि आप अपने WHERE खंड गलत स्तंभ का उपयोग है, तो आप Class नहीं Animal उपयोग करना चाहते हैं:

SELECT x1.Class 
    , STUFF((SELECT ',' + x2.Animal AS [text()] 
    FROM @xml x2 
    WHERE x1.Class = x2.Class 
    ORDER BY x2.Animal 
    FOR XML PATH('')),1,1,'') AS "Animals" 
FROM @xml x1 
GROUP BY Class 

SQL Fiddle with Demo देखें। नतीजा यह है:

|  CLASS |   ANIMALS | 
--------------------------------- 
| Asteroidea |   Starfish | 
| Mammalia | Cat,Coyote,Dog | 
| Reptilia | Crocodile,Lizard | 
संबंधित मुद्दे