请教大神,这个存储过程如何写?

qq_41163514 2017-11-24 02:34:48
表1
tid colname val1 val1 val2
1 js_dh 1700099
1 js_fsbh 1
1 js_je 700.00
1 js_kh null
1 js_sl null
1 js_jssj 2017-1-1
1 js_btbh 001
2
2
2
2
2
2
2

31万条数据


表2

js_dh js_fsbh js_je js_kh js_sl js_jsssj js_btbh
170009 1 700 2017-1-1 001



如何将表1的数据转换成表2的数据,谢谢各位老师

...全文
186 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
听雨停了 2017-11-24
  • 打赏
  • 举报
回复
引用 12 楼 qq_41163514的回复:
听雨停了网友,非常感谢你的热心帮助,真是无以言表的感谢,已经成功了, [quote=引用 10 楼 qq_37170555 的回复:] [quote=引用 9 楼 qq_41163514 的回复:] 你好,版主那个代码你能帮我改完整些吗,请原谅我这个菜鸟的请求,我对存储过程了解太少了,谢谢

declare @sql varchar(8000)
set @sql='insert into account_details(js_dh,js_fsbh,js_je,js_kh,js_sl,js_jssj,js_btbh) select js_dh,js_fsbh,js_je,js_kh,js_sl,js_jssj,js_btbh from (select tid'
select @sql=@sql+' , max(case colname when '''+ colname +''' then val1 else '''' end) ['+ colname +']'
from (select distinct colname from uuu_details) as a
set @sql=@sql+' from uuu_details group by tid) a'
exec(@sql)
以上代码直接复制过去执行就ok了,如果不报错那就没问题了。你的两个表示account_details和uuu_details对吧[/quote][/quote] 成功了就好,不用谢,帮助别人快乐自己嘛。这些都是举手之劳,有什么道理不帮助你呢
qq_41163514 2017-11-24
  • 打赏
  • 举报
回复
听雨停了网友,非常感谢你的热心帮助,真是无以言表的感谢,已经成功了,
引用 10 楼 qq_37170555 的回复:
[quote=引用 9 楼 qq_41163514 的回复:] 你好,版主那个代码你能帮我改完整些吗,请原谅我这个菜鸟的请求,我对存储过程了解太少了,谢谢

declare @sql varchar(8000)
set @sql='insert into account_details(js_dh,js_fsbh,js_je,js_kh,js_sl,js_jssj,js_btbh) select js_dh,js_fsbh,js_je,js_kh,js_sl,js_jssj,js_btbh from (select tid'
select @sql=@sql+' , max(case colname when '''+ colname +''' then val1 else '''' end) ['+ colname +']'
from (select distinct colname from uuu_details) as a
set @sql=@sql+' from uuu_details group by tid) a'
exec(@sql)
以上代码直接复制过去执行就ok了,如果不报错那就没问题了。你的两个表示account_details和uuu_details对吧[/quote]
yilanwuyu123 2017-11-24
  • 打赏
  • 举报
回复
pivot.....
听雨停了 2017-11-24
  • 打赏
  • 举报
回复
引用 9 楼 qq_41163514 的回复:
你好,版主那个代码你能帮我改完整些吗,请原谅我这个菜鸟的请求,我对存储过程了解太少了,谢谢

declare @sql varchar(8000)
set @sql='insert into account_details(js_dh,js_fsbh,js_je,js_kh,js_sl,js_jssj,js_btbh) select js_dh,js_fsbh,js_je,js_kh,js_sl,js_jssj,js_btbh from (select tid'
select @sql=@sql+' , max(case colname when '''+ colname +''' then val1 else '''' end) ['+ colname +']'
from (select distinct colname from uuu_details) as a
set @sql=@sql+' from uuu_details group by tid) a'
exec(@sql)
以上代码直接复制过去执行就ok了,如果不报错那就没问题了。你的两个表示account_details和uuu_details对吧
qq_41163514 2017-11-24
  • 打赏
  • 举报
回复
你好,版主那个代码你能帮我改完整些吗,请原谅我这个菜鸟的请求,我对存储过程了解太少了,谢谢
听雨停了 2017-11-24
  • 打赏
  • 举报
回复
引用 7 楼 qq_41163514 的回复:
不好意思,忘记说了,是SQL2000
那你就用楼上版主那个办法,2000不支持povit函数,但是你可以用max(case when)这样的
qq_41163514 2017-11-24
  • 打赏
  • 举报
回复
不好意思,忘记说了,是SQL2000
听雨停了 2017-11-24
  • 打赏
  • 举报
回复
引用 5 楼 qq_41163514 的回复:
T1 目标表T2 我试了出错呢
你这个什么数据库啊,是sql server吗?是的话是什么版本的啊
qq_41163514 2017-11-24
  • 打赏
  • 举报
回复
T1


目标表T2


我试了出错呢
听雨停了 2017-11-24
  • 打赏
  • 举报
回复
引用 3 楼 qq_41163514 的回复:
如何建立个循环,把31万条数据转到表2里面,
建立循环干嘛,上面那样直接就可以出来啊,你把查询出来的数据直接插入表2就可以了啊,看我上面的回答
qq_41163514 2017-11-24
  • 打赏
  • 举报
回复
如何建立个循环,把31万条数据转到表2里面,
二月十六 2017-11-24
  • 打赏
  • 举报
回复
这样满足要求吗?
--测试数据
if not object_id(N'Tempdb..#T1') is null
drop table #T1
Go
Create table #T1([tid] int,[colname] nvarchar(27),[val1] nvarchar(28))
Insert #T1
select 1,N'js_dh',N'1700099' union all
select 1,N'js_fsbh',N'1' union all
select 1,N'js_je',N'700.00' union all
select 1,N'js_kh',null union all
select 1,N'js_sl',null union all
select 1,N'js_jssj',N'2017-1-1' union all
select 1,N'js_btbh',N'001'
Go
--测试数据结束
declare @sql varchar(8000)
set @sql='select tid'
select @sql=@sql+' , max(case colname when '''+ colname +''' then val1 else '''' end) ['+ colname +']'
from (select distinct colname from #T1) as a
set @sql=@sql+' from #T1 group by tid'
exec(@sql)


听雨停了 2017-11-24
  • 打赏
  • 举报
回复

use Tempdb
go
--> --> 听雨停了-->测试数据

if not object_id(N'Tempdb..#tab') is null
drop table #tab
Go
Create table #tab([tid] int,[colname] nvarchar(27),[val1] nvarchar(28))
Insert #tab
select 1,N'js_dh',N'1700099' union all
select 1,N'js_fsbh',N'1' union all
select 1,N'js_je',N'700.00' union all
select 1,N'js_kh',null union all
select 1,N'js_sl',null union all
select 1,N'js_jssj',N'2017-1-1' union all
select 1,N'js_btbh',N'001' UNION all
select 2,N'js_dh',N'1700088' union all
select 2,N'js_fsbh',N'1' union all
select 2,N'js_je',N'800.00' union all
select 2,N'js_kh','200' union all
select 2,N'js_sl','200' union all
select 2,N'js_jssj',N'2017-1-1' union all
select 2,N'js_btbh',N'001'
--测试数据结束
Select * from #tab

DECLARE @name VARCHAR(max),@sql VARCHAR(max)
set @name =stuff((SELECT DISTINCT ',['+[colname]+']' from #tab for xml PATH('')),1,1,'')
PRINT @name
set @sql ='SELECT [js_btbh],[js_dh],[js_fsbh],[js_je],[js_jssj],[js_kh],[js_sl] from #tab pivot(max(val1)for [colname] in('+@name+'))a'
PRINT @sql
EXEC( @sql)

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧