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查询,然后加入它们来解决这个问题。无论如何,感谢大家的支持:-)