Sql server 2008 r2 Sql Unpivot中出错

Sql server 2008 r2 Sql Unpivot中出错,sql-server-2008-r2,Sql Server 2008 R2,我有以下疑问 CREATE TABLE yourtable ([Country_Code] varchar(3),[Location] varchar (10),[ProcessedMonth] nvarchar(50),[ProcessedYear] nvarchar(50),[BillingMonth] nvarchar(50),[BillingYear] nvarchar(50), [aaa] nvarchar(40),[aaa Narration] nvarchar(40),[a

我有以下疑问

CREATE TABLE yourtable
    ([Country_Code] varchar(3),[Location] varchar (10),[ProcessedMonth] nvarchar(50),[ProcessedYear] nvarchar(50),[BillingMonth] nvarchar(50),[BillingYear] nvarchar(50), [aaa] nvarchar(40),[aaa Narration] nvarchar(40),[aaa Remarks] nvarchar(40), [bbb] nvarchar(40), [bbb Narration] nvarchar(40),[bbb Remarks] nvarchar(40), [ccc] nvarchar(40),[ccc Narration] nvarchar(40),[ccc Remarks] nvarchar(40), [ddd] nvarchar(40),[ddd Narration] nvarchar(40),[ddd Remarks] nvarchar(40))
;

INSERT INTO yourtable
    ([Country_Code],[Location],[ProcessedMonth],[ProcessedYear],[BillingMonth],[BillingYear] , [aaa],[aaa Narration],[aaa Remarks] , [bbb],[bbb Narration],[bbb Remarks] , [ccc],[ccc Narration],[ccc Remarks], [ddd],[ddd Narration],[ddd Remarks] )
VALUES
    ('IND','-1', 'sep', '2013', 'sep', '2012','1','asdf1','qwer1','2','asdf2','','3','','qwer3','Y','asdf4','wqeq4')    
;
Declare @Col nvarchar(max)
        Declare @ServiceName nvarchar(50)
Select @Col = ''


    Declare #tmpColList cursor for
                Select ServiceName from tbl_servicemapping order by serviceid
            Open #tmpColList 
                Fetch from #tmpColList into @ServiceName
            while @@FETCH_STATUS = 0
            Begin
                if @Col = ''
                    Select @Col = '''' + @ServiceName + ''''
                else
                    Select @Col = @Col + ',' + '''' + @ServiceName + ''''
                Fetch from #tmpColList into @ServiceName
            end
            close #tmpColList
            deallocate #tmpColList
            print @Col  --o/p of this statement is 'aaa','bbb','ccc','ddd','eee',


DECLARE @colsUnpivot AS NVARCHAR(MAX),
@colsUnpivot1 AS NVARCHAR(MAX),
@colsUnpivot2 AS NVARCHAR(MAX),

   @query  AS NVARCHAR(MAX)

select @colsUnpivot = stuff((select ','+quotename(C.name)
         from sys.columns as C
         where C.object_id = object_id('yourtable') and
               C.name != 'Country_Code'
           and C.name!='Location'  
                             and C.name!='ProcessedMonth'  
                             and C.name!='ProcessedYear'
                              and C.name!='BillingMonth'  
                             and C.name!='BillingYear'
                             and C.Name not like '%Narration'
                             and C.Name not like '%Remarks'
         for xml path('')), 1, 1, '')

        select @colsUnpivot1 = stuff((select ','+quotename(C.name)
         from sys.columns as C
         where C.object_id = object_id('yourtable') and
               C.name != 'Country_Code'
           and C.name!='Location'  
                             and C.name!='ProcessedMonth'  
                             and C.name!='ProcessedYear'
                              and C.name!='BillingMonth'  
                             and C.name!='BillingYear'  
                             and C.Name not in (@Col)
                             and C.Name not like '%Remarks'

         for xml path('')), 1,1, '') 

         select @colsUnpivot2 = stuff((select ','+quotename(C.name)
         from sys.columns as C
         where C.object_id = object_id('yourtable') and
               C.name != 'Country_Code'
           and C.name!='Location'  
                             and C.name!='ProcessedMonth'  
                             and C.name!='ProcessedYear'
                              and C.name!='BillingMonth'  
                             and C.name!='BillingYear'  
                             and C.Name not in (select @Col)
                             and C.Name not like '%Narration'
         for xml path('')), 1,1, '') 


set @query 
  = 'select country_code,Location,processedmonth,processedyear,billingmonth,billingyear, servicename,Value as NoOfRecords,Val as Narration,Vale as Remarks
     from yourtable
      UNPIVOT
     (
        Value
        for servicename in ('+ @colsunpivot +')) as r
         UNPIVOT        
        ( Val
        for servicenamenarration in ('+ @colsunpivot1 +')) as t
        UNPIVOT        
        ( Vale
        for servicenameremarks in ('+ @colsunpivot2 +')) as f

       WHERE RIGHT(Val, 1) = RIGHT(Value, 1) and RIGHT(Val, 1) = RIGHT(Vale, 1); '


exec(@query)
--drop table yourtable
它显示无效的列名“aaa”、“bbb”等,但当我硬连接
@col
值时,我没有收到任何错误,并且所需的o/p应为:

country_code    Location    processedmonth    processedyear    billingmonth    billingyear    servicename   NoOfRecords Narration   Remarks
IND -1  sep 2013    sep 2012    aaa 1   asdf1   qwer1
IND -1  sep 2013    sep 2012    bbb 2   asdf2   
IND -1  sep 2013    sep 2012    ccc 3       qwer3
IND -1  sep 2013    sep 2012    ddd Y   asdf4   qwer4

请帮助我们如何做到这一点。谢谢。

你得到的错误是什么?@Rino当我硬编码“@col”时,我没有得到任何错误,但是结果表忽略了不是所需的o/p的空值,如果我没有硬编码“@col”,那么我得到的错误是“列名无效”,请帮助我。你能
打印@query
而不是
执行它吗我们可以看到您生成了什么(没有数据或表格,很难猜测生成了什么)?@Damien_不信者我通过分别编写3个unpivot查询,然后加入它们来解决这个问题。无论如何,感谢大家的支持:-)