2009-07-13 13 views
6

मुझे लगता है कि होता है एक मेज पर एक गतिशील धुरी क्वेरी पर काम कर रहा हूँ ऑर्डर करने के लिए:एसक्यूएल गतिशील धुरी - कैसे कॉलम

  • OID - OrderID
  • आकार - उत्पाद
  • BucketNum के आकार - आदेश है कि आकार
  • मात्रा जाना चाहिए - कितने का आदेश दिया

आकार स्तंभ विभिन्न आकारों में शामिल है dependi ओआईडी पर एनजी।

तो, कोड का उपयोग कर पाया here, मैं इस एक साथ रखा:

DECLARE @listCol VARCHAR(2000) 
DECLARE @query VARCHAR(4000) 

SELECT @listCol = STUFF((SELECT distinct '], [' + [size] 
          FROM  #t 
         FOR 
          XML PATH('') 
         ), 1, 2, '') + ']' 


SET @query = 'SELECT * FROM 
     (SELECT OID, [size], [quantity] 
      FROM #t 
      ) src 
PIVOT (SUM(quantity) FOR Size 
IN (' + @listCol + ')) AS pvt' 


EXECUTE (@query) 

यह सिवाय इसके कि कॉलम हैडर (आकार लेबल) bucketnum स्तंभ पर आधारित क्रम में नहीं हैं महान काम करता है। आकार के आधार पर क्रम में हैं।

मैंने पिवट के बाद वैकल्पिक आदेश की कोशिश की है, लेकिन यह काम नहीं कर रहा है।

मैं उस क्रम को कैसे नियंत्रित करूं जिसमें कॉलम दिखाई देते हैं?

धन्यवाद

उत्तर

7

आपको इसे ठीक करने की जरूरत है:

SELECT @listCol = STUFF((SELECT distinct '], [' + [size] 
          FROM  #t 
         FOR 
          XML PATH('') 
         ), 1, 2, '') + ']' 

सही क्रम में कॉलम वापस जाने के लिए।

SELECT [size] 
FROM  #t 
GROUP BY [size] 
ORDER BY MIN(BucketNum) 
+1

अहह्ह! 'मिनी (बकेटनेट) थोड़ा सा मुझे चाहिए !! धन्यवाद, धन्यवाद! – GernBlandston

0

मैं इस लिंक को देखा आज ही है, जो बिना मक्खी पर स्तंभ सूची (जो, शायद, आप आदेश कर सकते हैं) के निर्माण के लिए एक CTE का उपयोग करता है: आप कुछ इस तरह के बजाय DISTINCT का उपयोग कर ऐसा करने के लिए हो सकता है गतिशील एसक्यूएल के लिए की जरूरत है:

http://blog.stevienova.com/2009/07/13/using-ctes-to-create-dynamic-pivot-tables-in-sql-20052008/

+0

धन्यवाद, जोएल। मैंने इसे नहीं देखा था, लेकिन मैं इसे देख लूंगा! – GernBlandston

+1

वह समाधान केवल स्तंभों के नाम पर गैर गतिशील है, कॉलम की संख्या में नहीं, जिसे अभी भी पिवट ऑपरेशन के समय गतिशील तकनीक की आवश्यकता होगी। मैंने उस तकनीक का उपयोग परिवर्तनीय दिनांक सीमाओं के लिए किया है, हालांकि यह हमेशा 12 महीने है, लेकिन विभिन्न महीनों से शुरू होता है - यह मूलभूत स्लाइडिंग ट्रांसफॉर्म है। –

0

मैं शायद समझ के अपने स्तर के कारण एक ही समस्या थी और समाधान ऊपर सुझाव की कोशिश की लेकिन, यह काम करने के लिए नहीं मिल सकता है। मुझे एक सरल हैक पाया गया था जिसमें कॉलम हेडर के साथ एक टेम्पैप टेबल बनाने के लिए सही ढंग से आदेश दिया गया था और फिर उस सूची को वेरिएबल पर खींचें जो गतिशील पिवट क्वेरी कॉलम नाम सेट करता है।

उदा।

SELECT WeekNum INTO #T3 
FROM #T2 
GROUP BY WeekNum 
ORDER BY MIN(WeekNum) 

SELECT @ColumnName1 = ISNULL(@ColumnName1 + ',','') + QuoteName(WeekNum) 
FROM (SELECT WeekNum From #T3) AS WeekNum 

एक इलाज किया।

उम्मीद है कि किसी की मदद करता है।

2
SELECT @listCol = STUFF(
     (SELECT DISTINCT ',' + QUOTENAME(size) AS [size] 
     FROM #t 
     ORDER BY [size] 
     FOR XML PATH('') 
+0

हालांकि यह प्रश्न प्रश्न का उत्तर दे सकता है, लेकिन क्या आप इस उत्तर के काम के बारे में थोड़ी अधिक जानकारी प्रदान कर सकते हैं? – JAL

+0

यह वही काम करता है जो मूल पोस्ट में कोड के रूप में होता है लेकिन यह कॉलम के लिए उपनाम बनाता है ताकि उसके पास एक ऑर्डर लागू हो। – frustratedInFresno

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