sql中的一个问题

kevinjay567 2010-06-29 04:14:11
请问,如何将这表变一下,

No1 NO2 NO3
1 26 NULL NULL
2 NULL 3 NULL
3 NULL NULL 5

变成以下这张?
No1 NO2 NO3
1 26 3 5

注行和列都是固定的
...全文
144 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xyj052 2010-06-29
  • 打赏
  • 举报
回复
可以这样写
Create table a1
(a int)

insert into a1(a)
select 26 union all
select 3 union all
select 5

select * from (select a,a as b from a1 ) a pivot (max(a) for b in ([26],[3],[5])) as pvt

行列转换,你可以看看这个帖子

http://topic.csdn.net/u/20100104/00/C8728CBB-1830-4786-AA12-ED09C399F8AB.html
kevinjay567 2010-06-29
  • 打赏
  • 举报
回复
那如果表没有自增,
只是
原表:
26
3
5

如何变成
26 3 5
xyj052 2010-06-29
  • 打赏
  • 举报
回复
你的行列转换里的代码估计多了一个自增列,才会出现这样的结果
把每行都有唯一值的列名去掉就可以了,这样就不会出现你的问题了
如果不懂的话,把你的代码贴出来,给你改下
kevinjay567 2010-06-29
  • 打赏
  • 举报
回复
但是表里的数据不一定是这些数据,但是表结构肯定是:3行2列

kevinjay567 2010-06-29
  • 打赏
  • 举报
回复
对,前表是行转列后结果了
原表:
0 26
1 3
2 5
我现在这样是不是拐弯抹角了
xyj052 2010-06-29
  • 打赏
  • 举报
回复
楼上的没问题了,你这个是不是做行列转换后的结果啊
如果是行列装换的结果,那你的代码去掉自增列的数就可以了
Sharon_liu 2010-06-29
  • 打赏
  • 举报
回复
楼上正解我蹭分
jiangshun 2010-06-29
  • 打赏
  • 举报
回复

--> 测试数据:[TB]
if object_id('[TB]') is not null drop table [TB]
create table [TB]([No1] int,[NO2] int,[NO3] int)
insert [TB]
select 26,null,null union all
select null,3,null union all
select null,null,5


select No1=max(isnull([No1],0)),
NO2=max(isnull([NO2],0)),
NO3=max(isnull([NO3],0))
from [TB]

/*
No1 NO2 NO3
----------- ----------- -----------
26 3 5

(1 行受影响)

*/

drop table [TB]
nightmaple 2010-06-29
  • 打赏
  • 举报
回复
select max(No1) as No1,max(No2) as No2,max(No3) as No3 from table

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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