2016-09-16 21 views
6

करने के लिए इसी कॉलम जोड़ने का तरीका Microsoft SQL सर्वर 2012कैसे एक धुरी डाटासेट

का उपयोग करते हुए मैं एक मेज है:

PartID |TypeSet | Setting | ObservID |TransDate 
--------------------------------------------- 
1   A 456  12 10/20/2015 
1   A 377  12 10/20/2015 
1   A 425  12 10/20/2015 
1   A 665  12 10/20/2015 
1   A 543  12 10/20/2015 
1   A 554  12 10/20/2015 
1   B 34  41 10/21/2015 
1   B 27  41 10/21/2015 
1   B 27  41 10/21/2015 
1   B 29  41 10/21/2015 
1   C 1299  12 10/20/2015 
1   C 1227  12 10/20/2015 

मैं निम्नलिखित के रूप में प्रदर्शित करना चाहते हैं। पार्टिड पर समूहित एकल पंक्ति।

PartID | A Avg | B Avg | C Avg | A ObservID | B ObservID | C ObservID 
--------------------------------------------------------------------- 
    1  503  29  1263  12    41   12 

मैं ObservIDs/ओ एक बहु पंक्ति वापसी डाटासेट बनाने डब्ल्यू प्रदर्शित करने के लिए नहीं मिल सकता है।

SELECT  
     PartID 
     ,[A] as 'A Average' 
     ,[B] as 'B Average' 
     ,[C] as 'C Average' 
    -- ,(ObservID) 
    --,CASE WHEN [A] = 'A Average' THEN max([ObservID]) END as 'A Ob' 
    --,CASE WHEN [B] = 'B Average' THEN max([ObservID]) END as 'B Ob' 
    -- ,CASE WHEN [C] = 'C Average' THEN max([ObservID]) END as 'C Ob' 
FROM 
(SELECT 
    PartID 
    ,TypeSet 
    ,Setting 
    --,ObservID 
    FROM #Temp1 
    ) as MeasData 
PIVOT 
(
    AVG(Setting) 
    FOR [TypeSet] in 
     ([A], [B], [C])  
) as PivotTable 

आप उपरोक्त क्वेरी जहां मैं इसमें ObservID पाने के लिए कोशिश की है लेकिन जब मैं उन पंक्तियों uncomment, त्रुटियां होती हैं में देख सकते हैं: मैं ए, बी और इस क्वेरी के साथ सी औसत के साथ कोई समस्या नहीं है। कुछ नोट्स: ऑब्जर्विड्स प्रत्येक टाइपसेट के लिए लगातार बने रहेंगे।

यहाँ डेटा है:

create table #Temp1 
(
    PartID INT 
, TypeSet VARCHAR(10) 
, Setting INT 
, ObservID INT 
, TransDate Date 
) 

INSERT INTO #Temp1(PartID, TypeSet, Setting, ObservID, TransDate) VALUES 
    (1, 'A', 456, 12, '10/20/2015'), 
    (1, 'A', 377, 12, '10/20/2015'), 
    (1, 'A', 425, 12, '10/20/2015'), 
    (1, 'A', 665, 12, '10/20/2015'), 
    (1, 'A', 543, 12, '10/20/2015'), 
    (1, 'A', 554, 12, '10/20/2015'), 
    (1, 'B', 34, 41, '10/21/2015'), 
    (1, 'B', 27, 41, '10/21/2015'), 
    (1, 'B', 27, 41, '10/21/2015'), 
    (1, 'B', 29, 41, '10/21/2015'), 
    (1, 'C', 1299, 12, '10/20/2015'), 
    (1, 'C', 1227, 12, '10/20/2015') 

धुरी आपरेशन के साथ अपने वांछित उत्पादन संभव है? या क्या मुझे प्रत्येक टाइपसेट के लिए टेबल पर एकाधिक जॉइन का मार्ग जाना चाहिए?

उत्तर

3

आप सशर्त एकत्रीकरण का उपयोग कर ऐसा कर सकते हैं:

SELECT PartID, 
    AVG(CASE WHEN TypeSet = 'A' THEN Setting END) AS 'A Avg', 
    AVG(CASE WHEN TypeSet = 'B' THEN Setting END) AS 'B Avg', 
    AVG(CASE WHEN TypeSet = 'C' THEN Setting END) AS 'C Avg', 
    MAX(CASE WHEN TypeSet = 'A' THEN ObservID END) AS 'A ObservID', 
    MAX(CASE WHEN TypeSet = 'B' THEN ObservID END) AS 'B ObservID', 
    MAX(CASE WHEN TypeSet = 'C' THEN ObservID END) AS 'C ObservID' 
FROM #Temp1 
GROUP BY PartID 
+0

यह बहुत अच्छा है। मुझे जो चाहिए वह मुझे प्राप्त करता है। मेरी एकमात्र चिंता प्रदर्शन है लेकिन साथ ही, मैंने व्याख्या योजनाओं की समीक्षा नहीं की है ... लेकिन इसके लिए धन्यवाद। – Charlie

+1

@Charlie यह 'PIVOT' का उपयोग कर किसी भी क्वेरी के जितना तेज़ होना चाहिए। 'PIVOT' वास्तव में सशर्त एकत्रीकरण के लिए वाक्य रचनात्मक चीनी है। –

0
WITH avgPivot AS 
(
    SELECT 
     PartID,[a] as A_Avg,[b] as B_Avg,[c] as C_Avg 
    FROM 
    (
    SELECT PartID, TypeSet, Setting, ObservID 
    FROM #Temp1 
) As S 
    PIVOT 
    (
    AVG(Setting) 
    FOR TypeSet in([a],[b],[c]) 
) 
    AS pvt 
), 
maxPivot AS 
(
    SELECT 
     [a] as A_ObservID, [B]B_ObservID, [c] as c_ObservID 
    FROM 
    (
    SELECT PartID, TypeSet, Setting, ObservID 
    FROM #Temp1 
) As S 
    PIVOT 
    (
    max(ObservID) 
    FOR TypeSet in([a],[b],[c]) 
) 
    AS pvt 
) 

SELECT distinct * 
FROM avgPivot M 
cross JOIN maxPivot A 
+0

यह मुझे NULL देता है और एक बहु-पंक्ति डेटासेट बनाता है। – Charlie

+0

आपको एकल पंक्ति की आवश्यकता है ....... – Chanukya

+0

स्पष्ट नहीं होने के लिए खेद है, लेकिन हाँ, पार्टिड पर आधारित एकल पंक्ति – Charlie

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