SQL - 如何创建一个包含值为列和新格式的表?

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知识肯定是有限的,但是当我需要解决方案时,我总是会犯错误.在这种情况下,我甚至不知道从哪里开始.有人能指出我正确的方向吗?

Kev*_*vin 1

从这个查询开始:

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)