2012-04-05 13 views
11

मैं मैं आस्तियों, लोग, पर्यावरण और प्रतिष्ठा प्रदर्शित करने के लिए के रूप में कॉलम और प्रदर्शन मूल्यों के रूप में वर्णन का मिलान नहीं हुआ मेरा डेटाबेस (SQL सर्वर 2008)एसक्यूएल सर्वर में पाठ कॉलम कैसे पिटोट करें?

ID  Type   Desc 
-------------------------------- 
C-0 Assets   No damage 
C-0 Environment  No impact 
C-0 People   No injury or health effect 
C-0 Reputation  No impact 
C-1 Assets   Slight damage 
C-1 Environment  Slight environmental damage 
C-1 People   First Aid Case (FAC) 
C-1 Reputation  Slight impact; Compaints from local community 

में इस तरह एक मेज है। लेकिन जब मैं पिवट क्वेरी चलाता हूं, तो मेरे सभी मूल्य शून्य होते हैं।

क्या कोई मेरी क्वेरी में देख सकता है मुझे बताओ कि मैं गलत कहां कर रहा हूं?

Select severity_id,pt.[1] As People, [2] as Assets , [3] as Env, [4] as Rep 
FROM 
(
    select * from COMM.Consequence 
) As Temp 
PIVOT 
(
    max([DESCRIPTION]) 
    FOR [TYPE] In([1], [2], [3], [4]) 
) As pt 

यहाँ मेरी उत्पादन

ID People Assets Env  Rep 
----------------------------------- 
C-0 NULL NULL NULL NULL 
C-1 NULL NULL NULL NULL 
C-2 NULL NULL NULL NULL 
C-3 NULL NULL NULL NULL 
C-4 NULL NULL NULL NULL 
C-5 NULL NULL NULL NULL 

उत्तर

20
Select severity_id, pt.People, Assets, Environment, Reputation 
FROM 
(
    select * from COMM.Consequence 
) As Temp 
PIVOT 
(
    max([DESCRIPTION]) 
    FOR [TYPE] In([People], [Assets], [Environment], [Reputation]) 
) As pt 
+2

धन्यवाद माइकल !!!! – Dinesh

+1

आपका स्वागत है! –

+0

मैं उत्सुक था कि पहली बार पीटी का चयन क्यों करें। लोगों का इस्तेमाल किया गया था, लेकिन पीटी। उपसर्ग की आवश्यकता नहीं है – Jowen

0

मैं एसक्यूएल सर्वर में इस निर्मित और यह सिर्फ ठीक काम करता है है।

मैं इसे काम में बदलने की कोशिश कर रहा हूं जब कोई नहीं जानता कि सामग्री प्रकार और वर्णन कॉलम में क्या होगी।

मैं इसे एक गाइड के रूप में भी उपयोग कर रहा था। (Convert Rows to columns using 'Pivot' in SQL Server)

संपादित ----

यहाँ है इसके बाद के संस्करण, जहाँ आप या तो क्षेत्र में सामग्री पता नहीं है के लिए मेरे समाधान ....

-- setup commands 
     drop table #mytemp 
     go 

     create table #mytemp (
      id varchar(10), 
      Metal_01 varchar(30), 
      Metal_02 varchar(100) 
     ) 


-- insert the data 
     insert into #mytemp 
     select 'C-0','Metal One','Metal_One' union all 
     select 'C-0','Metal & Two','Metal_Two' union all 
     select 'C-1','Metal One','Metal_One' union all 
     select 'C-1','Metal (Four)','Metal_Four' union all 
     select 'C-2','Metal (Four)','Metal_Four' union all 
     select 'C-2','Metal/Six','Metal_Six' union all 
     select 'C-3','Metal Seven','Metal_Seven' union all 
     select 'C-3','Metal Eight','Metal_Eight' 

-- prepare the data for rotating: 
     drop table #mytemp_ReadyForRotate 
     select *, 
        replace(
         replace(
          replace(
           replace(
            replace(
               mt.Metal_01,space(1),'_' 
              ) 
             ,'(','_' 
             ) 
            ,')','_' 
            ) 
           ,'/','_' 
           ) 
          ,'&','_' 
          ) 
        as Metal_No_Spaces 
     into #mytemp_ReadyForRotate 
     from #mytemp mt 

    select 'This is the content of "#mytemp_ReadyForRotate"' as mynote, * from #mytemp_ReadyForRotate 

-- this is for when you KNOW the content: 
-- in this query I am able to put the content that has the punctuation in the cell under the appropriate column header 

     Select id, pt.Metal_One, Metal_Two, Metal_Four, Metal_Six, Metal_Seven,Metal_Eight 
     FROM 
     (
      select * from #mytemp 
     ) As Temp 
     PIVOT 
     (
      max(Metal_01) 
      FOR Metal_02 In(
           Metal_One, 
           Metal_Two, 
           Metal_Four, 
           Metal_Six, 
           Metal_Seven, 
           Metal_Eight 
     ) 
     ) As pt 


-- this is for when you DON'T KNOW the content: 
-- in this query I am UNABLE to put the content that has the punctuation in the cell under the appropriate column header 
-- unknown as to why it gives me so much grief - just can't get it to work like the above 
-- it WORKS just fine but not with the punctuation field 
     drop table ##csr_Metals_Rotated 
     go 

     DECLARE @cols AS NVARCHAR(MAX), 
      @query AS NVARCHAR(MAX), 
      @InsertIntoTempTable as nvarchar(4000) 

     select @cols = STUFF((SELECT ',' + QUOTENAME(Metal_No_Spaces) 
          from #mytemp_ReadyForRotate 
          group by Metal_No_Spaces 
          order by Metal_No_Spaces 
        FOR XML PATH(''), TYPE 
        ).value('.', 'NVARCHAR(MAX)') 
       ,1,1,'') 

     set @query = 'SELECT id,' + @cols + ' into ##csr_Metals_Rotated from 
        (
         select id as id, Metal_No_Spaces 
         from #mytemp_ReadyForRotate 
        ) x 
        pivot 
        (
         max(Metal_No_Spaces) 
         for Metal_No_Spaces in (' + @cols + ') 
        ) p ' 
     execute(@query); 

     select * from ##csr_Metals_Rotated 
+0

जबकि यह सैद्धांतिक रूप से प्रश्न का उत्तर दे सकता है, [यह बेहतर होगा] (// meta.stackoverflow.com/q/8259) के आवश्यक भागों को शामिल करने के लिए यहां जवाब दें, और संदर्भ के लिए लिंक प्रदान करें। – GhostCat

+0

मुझे माफी माँगनी है - मेरा "उत्तर" प्रश्न का उत्तर नहीं देता है। - मुझे बस इस पोस्ट के पोस्ट उत्तर को गतिशील होने की आवश्यकता है ... जहां प्रोग्रामर को फ़ील्ड की सामग्री नहीं पता था, तब तक SQL सर्वर फ्लाई पर फ़ील्ड बना सकता है और उन्हें पॉप्युलेट कर सकता है। - मैं इसे समझने में सक्षम था और मैं कुछ दिनों में अपने निष्कर्ष यहां पोस्ट करूंगा - अभी एक समय की कमी के तहत। – user2792497

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