积极答复者
pivot

问题
-
我导入数据库的数据和数据库的结构不一样,所以,先要将导入的表,进行upivot处理,然后附加到总存储表里。
我的问题是,如何将转置后的表追加到已有表中?以下是别人以前给出的转置语句。我希望将这个转置后的表追加到“FS”这个table中。
use Sales
--select * from [Sales].[dbo].[科目余额表]
declare @cmd varchar(max)
declare @columns varchar(max)SELECT @columns = COALESCE(@columns + ',' + column_name, column_name)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = '科目余额表'
AND column_name NOT IN ('科目代码', '科目名称')
set @cmd = 'select 科目代码,科目名称,类别,amount from (select 科目代码,科目名称,' + @columns + ' from [Sales].[dbo].[科目余额表]) p unpivot (amount for 类别 in (' + @columns + ')) as unpvt'
exec(@cmd)- 已编辑 Ikkyuu 2013年11月26日 7:30 补充
答案
-
use Sales
--select * from [Sales].[dbo].[科目余额表]
declare @cmd varchar(max)
declare @columns varchar(max)SELECT @columns = COALESCE(@columns + ',' + column_name, column_name)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = '科目余额表'
AND column_name NOT IN ('科目代码', '科目名称')
set @cmd = '
with
data as(
select 科目代码,科目名称,类别,amount from (select 科目代码,科目名称,' + @columns + ' from [Sales].[dbo].[科目余额表]) p
unpivot (amount for 类别 in (' + @columns + ')) as unpvt
)
merge 总存储表 as t
using data
on t.科目代码 = data.科目代码 -- 判断是否存在的条件
when matched then
update set -- 如果根据条件判断已经存在,则做更新
amount = data.amount -- 你要更新的列
when not matched by target then
insert ( 科目代码,科目名称,类别,amount )
values ( 科目代码,科目名称,类别,amount )
;
'
exec(@cmd)- 已标记为答案 Ikkyuu 2013年11月27日 1:21
全部回复
-
use Sales
--select * from [Sales].[dbo].[科目余额表]
declare @cmd varchar(max)
declare @columns varchar(max)SELECT @columns = COALESCE(@columns + ',' + column_name, column_name)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = '科目余额表'
AND column_name NOT IN ('科目代码', '科目名称')
set @cmd = '
with
data as(
select 科目代码,科目名称,类别,amount from (select 科目代码,科目名称,' + @columns + ' from [Sales].[dbo].[科目余额表]) p
unpivot (amount for 类别 in (' + @columns + ')) as unpvt
)
merge 总存储表 as t
using data
on t.科目代码 = data.科目代码 -- 判断是否存在的条件
when matched then
update set -- 如果根据条件判断已经存在,则做更新
amount = data.amount -- 你要更新的列
when not matched by target then
insert ( 科目代码,科目名称,类别,amount )
values ( 科目代码,科目名称,类别,amount )
;
'
exec(@cmd)- 已标记为答案 Ikkyuu 2013年11月27日 1:21