pivot排序的问题!

超凡 2011-06-22 12:03:01


declare @sql varchar(max)
select @sql =isnull(@sql + '],[' , '') + a2 from #a group by a2
set @sql = '[' + @sql + ']'
exec ('select * from (select * from #a ) a pivot (max(Losttime) for a2 in (' + @sql + ')) b')



按c2排序

a1 a2 c1 c2
CO OP20 93 103
Q OP20 10 103
Q OP60 90 90
DT OP50 70 70
CO OP70 21 30
DT OP70 9 30
DT OP40 14 14

之后再行转列,但转后顺序重新排过了!他按op20,op30,op40......
a1 op20 op40 op50 op60 op70
CO 93 NULL NULL NULL 21
DT NULL 14 70 NULL 9
Q 10 NULL NULL 90 NULL



结果顺序
a1 op20 OP60 op50 OP70 OP40

...全文
404 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
超凡 2011-06-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 roy_88 的回复:]
SQL code
declare @sql varchar(max)
;WITH C
AS
(SELECT ROW_NUMBER()OVER(ORDER BY (SELECT 1)) AS ID,[a2] FROM #a
)
select @sql =isnull(@sql + '],[' , '') + a2 FROM c AS a WHERE NOT EXISTS(SELECT 1……
[/Quote]

select @sql =isnull(@sql + '],[' , '') + a2 FROM c....
假如我只想查a2 的top 2个数来转列!怎样写! 也就是说查出来的结果我只想要两列
超凡 2011-06-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qianjin036a 的回复:]
明白了...
楼主,数据库里对列的先后顺序是不讲究的,列在哪儿都是一样的,只要数据对就行.
如果你一定要对列的顺序排列然后显示,那可以在应用层解决.
[/Quote]


天哥,你看,又是行转列的问题! ..... 刚回了你受不了!哪来那么多行转列!
中国风 2011-06-22
  • 打赏
  • 举报
回复
在@sql賦值排好順序
中国风 2011-06-22
  • 打赏
  • 举报
回复
declare @sql varchar(max)
;WITH C
AS
(SELECT ROW_NUMBER()OVER(ORDER BY (SELECT 1)) AS ID,[a2] FROM #a
)
select @sql =isnull(@sql + '],[' , '') + a2 FROM c AS a WHERE NOT EXISTS(SELECT 1 FROM c WHERE a2=a.a2 AND ID<a.ID)
PRINT @sql
set @sql = '[' + @sql + ']'
exec ('select * from (select * from #a ) a pivot (max(Losttime) for a2 in (' + @sql + ')) b')
超凡 2011-06-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 qianjin036a 的回复:]
可是可是...
你行转列后木有这个 c2 了啊!
[/Quote]

是的我C2是按a2统计的C2的值,按的C2的值排的序!

本来顺序是好的,转列后顺序变动了!变成按a2排序了!
GoAwayZ 2011-06-22
  • 打赏
  • 举报
回复
declare @sql varchar(max)
select @sql =isnull(@sql + '],[' , '') + a2 from #a group by a2
order by min(c2)--按c2排序
set @sql = '[' + @sql + ']'
exec ('select * from (select * from #a ) a pivot (max(Losttime) for a2 in (' + @sql + ')) b')


-晴天 2011-06-22
  • 打赏
  • 举报
回复
明白了...
楼主,数据库里对列的先后顺序是不讲究的,列在哪儿都是一样的,只要数据对就行.
如果你一定要对列的顺序排列然后显示,那可以在应用层解决.
GoAwayZ 2011-06-22
  • 打赏
  • 举报
回复
declare @sql varchar(max)
select @sql =isnull(@sql + '],[' , '') + a2 from #a group by a2
order by a2
set @sql = '[' + @sql + ']'
exec ('select * from (select * from #a ) a pivot (max(Losttime) for a2 in (' + @sql + ')) b')



-晴天 2011-06-22
  • 打赏
  • 举报
回复
可是可是...
你行转列后木有这个 c2 了啊!
-晴天 2011-06-22
  • 打赏
  • 举报
回复
加个 order by ?
超凡 2011-06-22
  • 打赏
  • 举报
回复
结果顺序应该 是按c2的值排序!

22,294

社区成员

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

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