दिलचस्प पोस्ट
(-2147483648> 0) सी ++ में सही देता है? NumPy में भारित मानक विचलन? मैं एक JAX-WS webservice क्लाइंट के लिए टाइमआउट कैसे सेट करूं? जावा में बूलियन बनाम बूलियन रिपॉजिटरीज का उपयोग करके काम के पैटर्न की इकाई में निर्भरता इंजेक्शन लिनक्स पर सभी फ़ोल्डर्स और फाइलों को लोअरकेस में कैसे बदलना है? मूल फ़ंक्शन से चर को असाइन करना: "असाइनमेंट से पहले संदर्भित स्थानीय चर" तालिकाओं की सूची, और प्रत्येक में फ़ील्ड, डेटाबेस में प्राप्त करना टाइमआउट XMLHttpRequest जबरन द्वारा एनएएस की शुरुआत करते समय चेतावनी से बचने के लिए PHP का उपयोग करने के लिए सबसे अच्छा तरीका क्या है? XML प्रतिक्रियाओं को बनाने और पार्स करने की आवश्यकता है मैं कैसे विशेष वर्णों के साथ सौदा करूँगा \ ^ $।? * * | + () [[मेरे रेगेक्स में? java.io.StreamCorruptedException: अवैध स्ट्रीम हैडर: 54657374 पायथन 2 से urllib2 के साथ HTTP हेड अनुरोध बनाना एक स्थिर निर्माता क्या है?

T-SQL में PIVOT फ़ंक्शन को समझना

मैं एसक्यूएल के लिए बहुत नया हूँ

मेरे पास इस तरह एक मेज है:

ID | TeamID | UserID | ElementID | PhaseID | Effort ----------------------------------------------------- 1 | 1 | 1 | 3 | 5 | 6.74 2 | 1 | 1 | 3 | 6 | 8.25 3 | 1 | 1 | 4 | 1 | 2.23 4 | 1 | 1 | 4 | 5 | 6.8 5 | 1 | 1 | 4 | 6 | 1.5 

और मुझे इस तरह से डेटा प्राप्त करने के लिए कहा गया था

 ElementID | PhaseID1 | PhaseID5 | PhaseID6 -------------------------------------------- 3 | NULL | 6.74 | 8.25 4 | 2.23 | 6.8 | 1.5 

मैं समझता हूं कि मुझे PIVOT फ़ंक्शन का उपयोग करने की आवश्यकता है I लेकिन इसे स्पष्ट रूप से नहीं समझ सकता अगर कोई इसे उपरोक्त मामले में समझा सकता है तो यह बहुत मददगार होगी। (या यदि कोई विकल्प हो तो)

वेब के समाधान से एकत्रित समाधान "T-SQL में PIVOT फ़ंक्शन को समझना"

एक PIVOT एक कॉलम से डेटा को कई कॉलम में घुमाने के लिए इस्तेमाल किया जाता है।

आपके उदाहरण के लिए यहां एक स्थिर पिवोट है जिसका अर्थ है कि आपको कठिन कोड कॉलम हैं जिन्हें आप बारी बारी से करना चाहते हैं:

 create table temp ( id int, teamid int, userid int, elementid int, phaseid int, effort decimal(10, 5) ) insert into temp values (1,1,1,3,5,6.74) insert into temp values (2,1,1,3,6,8.25) insert into temp values (3,1,1,4,1,2.23) insert into temp values (4,1,1,4,5,6.8) insert into temp values (5,1,1,4,6,1.5) select elementid , [1] as phaseid1 , [5] as phaseid5 , [6] as phaseid6 from ( select elementid, phaseid, effort from temp ) x pivot ( max(effort) for phaseid in([1], [5], [6]) )p 

यहां एक कार्यरत संस्करण के साथ एक एसक्यूएल डेमो है

यह एक गतिशील PIVOT के माध्यम से भी किया जा सकता है जहां आप स्तंभों की सूची गतिशील रूप से बनाते हैं और PIVOT करते हैं।

 DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); select @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.phaseid) FROM temp c FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @query = 'SELECT elementid, ' + @cols + ' from ( select elementid, phaseid, effort from temp ) x pivot ( max(effort) for phaseid in (' + @cols + ') ) p ' execute(@query) 

दोनों के लिए परिणाम:

 ELEMENTID PHASEID1 PHASEID5 PHASEID6 3 Null 6.74 8.25 4 2.23 6.8 1.5 

ये बहुत ही बुनियादी धुरी का उदाहरण हैं, इसलिए कृपया उस माध्यम से जाएं

एसक्यूएल सर्वर – PIVOT और UNPIVOT तालिका उदाहरण

उत्पाद तालिका के लिए उपर्युक्त लिंक का उदाहरण:

 SELECT PRODUCT, FRED, KATE FROM ( SELECT CUST, PRODUCT, QTY FROM Product) up PIVOT (SUM(QTY) FOR CUST IN (FRED, KATE)) AS pvt ORDER BY PRODUCT 

प्रस्तुत करता है:

  PRODUCT FRED KATE -------------------- BEER 24 12 MILK 3 1 SODA NULL 6 VEG NULL 5 

इसी तरह के उदाहरण SQL सर्वर में ब्लॉग पोस्ट पीवोट तालिकाओं में पाए जा सकते हैं । एक साधारण नमूना

संगतता त्रुटि सेट करने के लिए

पिवट फ़ंक्शन का उपयोग करने से पहले इसका उपयोग करें

 ALTER DATABASE [dbname] SET COMPATIBILITY_LEVEL = 100 

मैं इस के लिए नया था और मैं इसके बारे में एक अच्छी पोस्ट बना … मेरी समस्या समझ रही थी कि कैसे एकत्रीकरण को सही तरीके से लागू किया जाए और मेरी पोस्ट यहां है: http://jaider.net/posts/1176-pivot-in-sql-server -correct रूप से समेकित परिणाम /

@ ब्ल्यूफीट समाधान में, यह उल्लेख करना महत्वपूर्ण है कि elementid आपके "अदृश्य" Group By के प्रमुख स्तंभ है। इसके अतिरिक्त, आप elementid को प्रतिस्थापित कर सकते हैं या अधिक कॉलम जैसे कि elementid जोड़ सकते हैं।

यहां छवि विवरण दर्ज करें

  SELECT <non-pivoted column>, [first pivoted column] AS <column name>, [second pivoted column] AS <column name>, ... [last pivoted column] AS <column name> FROM (<SELECT query that produces the data>) AS <alias for the source query> PIVOT ( <aggregation function>(<column being aggregated>) FOR [<column that contains the values that will become column headers>] IN ( [first pivoted column], [second pivoted column], ... [last pivoted column]) ) AS <alias for the pivot table> <optional ORDER BY clause>; USE AdventureWorks2008R2 ; GO SELECT DaysToManufacture, AVG(StandardCost) AS AverageCost FROM Production.Product GROUP BY DaysToManufacture; DaysToManufacture AverageCost 0 5.0885 1 223.88 2 359.1082 4 949.4105 -- Pivot table with one row and five columns SELECT 'AverageCost' AS Cost_Sorted_By_Production_Days, [0], [1], [2], [3], [4] FROM (SELECT DaysToManufacture, StandardCost FROM Production.Product) AS SourceTable PIVOT ( AVG(StandardCost) FOR DaysToManufacture IN ([0], [1], [2], [3], [4]) ) AS PivotTable; Here is the result set. Cost_Sorted_By_Production_Days 0 1 2 3 4 AverageCost 5.0885 223.88 359.1082 NULL 949.4105