当前位置:数据库 > SQLServer >>

sqlserver2005中,怎样将一行6列的数据转换为3列数据,具体的看问题补充。

现在我有一个存储过程,ALTER proc [dbo].[My_GetMyPayAmount] @studentId varchar(20) as select ContractNew.StudentName,ContractNew.PayAmount,ContractNew.SignDate,ContractReNewal.PayAmount as repayamount, ContractReNewal.SignDate as repayaddtime,(0-RefundAmount) as RefundAmount,RefundDate from ContractNew left join ContractReNewal on ContractNew.studentId=ContractReNewal.studentId left join ContractRefund on ContractNew.studentId=ContractRefund.studentId where ContractNew.studentId=@studentId,查询后的到的结果是 表头数据 StudentName,PayAmount,SignDate,repayamount,repayaddtime,RefundAmount,RefundDate 实际数据是 张琳,1600.00,2012-02-08 00:00:00.000,1600.00,2012-04-01 00:00:00.000,NULL,NULL 我想让数据显示为 张琳,1600.00,2012-02-08 00:00:00.000,新签 张琳,1600.00,2012-04-01 00:00:00.000,续费 退费金额还没有,所以不显示,如果有的话,再显示出来。
追问:不对啊,有语法错误了。对啊,我改了啊。select StudentName,PayAmount,SignDate from (select ContractNew.StudentName,ContractNew.PayAmount,ContractNew.SignDate,ContractReNewal.PayAmount as repayamount,不是,两个null是退费,因为退费里面没有记录,所以不用显示。若是有记录的话,也是会列出来
张琳,1600.00,2012-04-01 00:00:00.000,退费    这条数据表示   要求退费的学生  退费金额   退费时间   类型
答案:看你写的是存储过程,那就用临时表实现
以下是我的操作你那张表的存储过程,能实现了你要求的才贴上来的
create procedure proc_ContractNew
as
begin
create table #tablea(aname varchar(20),bmoney decimal,cdate datetime,dtext varchar(20))
begin tran
insert into #tablea(aname,bmoney,cdate,dtext)select StudentName,PayAmount,SignDate,'新签' from ContractNew
insert into #tablea(aname,bmoney,cdate,dtext)select StudentName,repayamount,repayaddtime,'续费' from ContractNew
commit tran
select * from #tablea
end
其他:select 1,2,3,7 from 上面的查询结果
union
select 4,5,6,8 from 上面的查询结果; with aa as (
select ContractNew.StudentName,
ContractNew.PayAmount,ContractNew.SignDate,
ContractReNewal.PayAmount as repayamount,
ContractReNewal.SignDate as repayaddtime,
(0-RefundAmount) as RefundAmount,RefundDate

from ContractNew 
left join ContractReNewal 
on ContractNew.studentId=ContractReNewal.studentId
 
left join ContractRefund 
on ContractNew.studentId=ContractRefund.studentId

where ContractNew.studentId=@studentId)

select StudentName,PayAmount,SignDate,'新签'
from aa
union 
select StudentName,repayamount,repayaddtime,'续费'
from aa
union
select StudentName,RefundAmount,RefundDate,'退费'
from aa PROVT好像有这个函数,你可以在SQL-2008中找到 

上一个:在sqlserver2005中怎样设置级联删除
下一个:sqlserver 去两个表的数据

Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,