求sql算法

lmm9407 2013-03-06 03:04:37
已知表如下:
ptime sid pvalue
00:00 1 1
00:00 2 2
00:00 3 3
01:01 2 4
01:01 3 5
02:01 1 6
02:01 2 7
03:01 1 8
03:01 2 9
03:01 3 10

现在通过sql语句查询得到如下结果:

ptime 1 2 3
00:00 1 2 3
02:01 6 7
03:01 8 9 10

就是以sid=1的时间为准,列出同一时间其它sid的值,求高手帮忙想一下算法
...全文
177 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

declare @sql nvarchar(max)
select @sql=isnull(@sql,'')+',max(case when row='+rtrim(number)+' then pvalue else null end)['+rtrim(number)+']' from  master..spt_values where type='p' and number between 1 and
(select max(ct) from(select ptime,ct=count(1) from tb a where exists(select 1 from tb b where b.sid=1 and a.ptime=b.ptime) group by ptime)tt)
exec('select ptime'+@sql+' from (select *,row=row_number()over(partition by ptime order by getdate()) from tb)t group by ptime having(min(sid)=1)')
昵称被占用了 2013-03-06
  • 打赏
  • 举报
回复
select ptime ,max(case when sid = 1 then pvalue end ) as [1] ,max(case when sid = 2 then pvalue end ) as [2] ,max(case when sid = 3 then pvalue end ) as [3] from tab group by ptime having max(case when sid = 1 then pvalue end ) is not null

22,209

社区成员

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

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