Cra*_*g C 6 sql sql-server-2008
我有一张桌子,目前看起来有点像这样 -
CASEID ¦ FORMNAME ¦ NAME ¦ VALUE
601554 ¦ CASEFORM ¦ Mond ¦ AAAA
601554 ¦ CASEFORM ¦ Tues ¦ BBBB
601554 ¦ CASEFORM ¦ Wedn ¦ CCCC
601554 ¦ CASEFORM ¦ Thur ¦ DDDD
Run Code Online (Sandbox Code Playgroud)
我现在想在SQL中创建一个新表,它将复制数据并完全改变其格式,如下所示 -
CASEID ¦ FORMNAME ¦ Mond ¦ Tues ¦ Wedn ¦ Thur
601554 ¦ CASEFORM ¦ AAAA ¦ BBBB ¦ CCCC ¦ DDDD
Run Code Online (Sandbox Code Playgroud)
原始表有大约400行,因此新表需要400列.
我的SQL知识肯定是有限的,但是当我需要解决方案时,我总是会犯错误.在这种情况下,我甚至不知道从哪里开始.有人能指出我正确的方向吗?
从这个查询开始:
create table NewTable(CASEID int, FORMNAME varchar(255))
go
insert into NewTable select distinct caseid,formname from OldTable
go
select distinct 'alter table NewTable add ' +[name]+ ' varchar(255)' from oldtable
Run Code Online (Sandbox Code Playgroud)
然后复制结果并运行它们。
然后运行此查询:
select distinct 'update NewTable set ' +Name+ ' = ''' + Value +''' where caseid = ' +cast(caseid as varchar(20))+
' and FORMNAME = '''+Formname+''''
from oldtable
Run Code Online (Sandbox Code Playgroud)
然后复制结果并运行它们。
编辑:添加了自动化版本:
create table NewTable(CASEID int, FORMNAME varchar(255))
go
insert into NewTable select distinct caseid,formname from OldTable
go
DECLARE @query VARCHAR(max)
set @query = ''
select @query = @query + 'alter table NewTable add ' +[name]+ ' varchar(255);' from (select distinct name from oldtable )c
exec (@query)
set @query = ''
select @query = @query+ 'update NewTable set ' +Name+ ' = ''' + Value +''' where caseid = ' +cast(caseid as varchar(20))+ ' and FORMNAME = '''+Formname+''''
from (select distinct Name, Value, Caseid, FormName from OldTable)c
exec (@query)
Run Code Online (Sandbox Code Playgroud)