2011-11-28 11 views
18

मुझे किसी तालिका पर रिकॉर्ड वापस करने की आवश्यकता है और मेरे परिणाम सेट में अल्पविराम से अलग सूची शामिल होना आवश्यक है।एसक्यूएल सर्वर उप क्वेरी अल्पविराम से अलग परिणाम

मैंने 3 टेबल की एक छवि संलग्न की है। मुझे एक ऐसा चयन करने की ज़रूरत है जो पहली तालिका में रिकॉर्ड लौटाती है और स्क्रीनशॉट में तीसरी तालिका में मौजूद अवॉर्ड फोकसनाम का अंतिम भाग शामिल है।

तो मेरा परिणाम सेट एक रिकॉर्ड लौटाएगा और इसमें पुरस्कार फोकस नामों की सूची शामिल होगी (अल्पविराम से अलग)।

enter image description here

+0

क्या तालिका नाम हैं जैसे एक अदिश-मान समारोह बनाएँ? – ManseUK

+0

तालिका नाम नामांकन, पुरस्कार फोकस, नामांकनअवर्ड फोकस (क्रम में वे स्क्रीनशॉट में दिखाई देते हैं) हैं। – obautista

उत्तर

43

यहाँ एक चाल मैं पहले उपयोग किए गए इसी तरह की बातों

 

    SELECT n.nominationID 
     , SUBSTRING((
          SELECT ',' + af.awardFocusName 
          FROM NominationAwardFocus naf 
          JOIN AwardFocus af 
           ON naf.awardFocusID = af.awardFocusID 
          WHERE n.nominationID = naf.nominationID 
          FOR XML PATH('') 

         ), 2, 1000000) 
    FROM Nomination n 

+1

आपको इसे 'पुरस्कार 'नामक' पुरस्कार 'नाम से आजमाया जाना चाहिए। यह सुंदर नहीं है। –

+0

मैंने समस्या और मुद्दे में भाग लिया, लेकिन एक साधारण प्रतिस्थापन समस्या हल हो गई। – Hagelt18

+0

उत्कृष्ट उत्तर! – jhilden

1

मुझे लगता है कि सबसे अच्छा समाधान एक उपयोगकर्ता द्वारा निर्धारित कुल कि मूल्यों concatenates (एक समूह में) एक अल्पविराम से अलग सूची में बनाने के लिए किया जाएगा। देखें उदाहरण 1 पर: http://msdn.microsoft.com/en-us/library/ms131056.aspx

उपयोग:

SELECT 
    Nomination.NominationId, 
    Nomination.Created, 
    Nomination.Updated, 
    dbo.Concatenate(AwardFocus.AwardFocusName) As Names 
FROM 
    Nomination 
    JOIN NominationAwardFocus 
     ON Nomination.NominationId = NominationAwardFocus.NominationId 
    JOIN AwardFocus 
     ON NominationAwardFocus.AwardFocusId = AwardFocus.AwardFocusId 
GROUP BY 
    Nomination.NominationId, 
    Nomination.Created, 
    Nomination.Updated 
1

इस

CREATE FUNCTION [dbo].[CreateCSV](
    @Id AS INT 
) 
RETURNS VARCHAR(MAX) 
AS 
BEGIN 
    Declare @lst varchar(max) 

    select @lst = isnull(@lst+',','')+AF.AwardFocusName 
    from AwardFocus as AF 
    inner join AwardFoccusNomination as AFN 
     on AF.AwardFocusID = AFN.AwardFocusID 
    where [email protected] 


    return @lst 

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