RICHEER COCA 2022-03-04 12:03 采纳率: 93.9%
浏览 46
已结题

按照查询条件,分别把 表#tb02 的 w1~11 替换成对应的数字,并每一行从小到大排序


---> 已知数据
if object_id('[tempdb]..#tb') is not null drop table #tb;
go
create table #tb (id int,w1 INT,w2 INT,w3 INT,w4 INT,w5 INT,w6 INT,w7 INT,w8 INT,w9 INT,w10 INT,w11 INT) ;
go
insert into #tb  -- select * from #tb
select '101','91','2','84','35','78','10','17','40','36','27','59'

---> 查询条件
if object_id('[tempdb]..#tb02') is not null drop table #tb02;
go

create table #tb02 (id int,n1 INT,n2 INT,n3 INT,n4 INT,n5 INT,n6 INT,n7 INT,n8 INT,n9 INT,n10 INT,n11 INT) ;
go
insert into #tb02  -- select * from #tb02
select '301','w2','w5','w9','','','','','','','',''
union all select '302','w1','w5','w6','w7','w8','w9','w10','w11','','',''
union all select '303','w2','w4','w6','w8','w10','w11','','','','',''
union all select '304','w1','w2','w3','w4','w5','w6','w7','w8','w9','w10','w11'

---> 按照查询条件,分别把 表#tb02 的 w1    w2    w3    w4    w5    w6    w7    w8    w9    w10    w11 替换成对应的数字,并每一行从小到大排序, 得到以下结果
------------------------------------------------
ID  n1  n2  n3  n4  n5  n6  n7  n8  n9  n10  n11
301    2    36  78                                 
302    10    17    27    36    40    59    78    91            
303    2    10    27    35    40    59                    
304    2    10    17    27    35    36    40    59    78    84  91    

不是这样的结果(原因是每一行没有排序)
-------------------------------------------------
ID  n1  n2  n3  n4  n5  n6  n7  n8  n9  n10  n11
301    2    78    36                                
302    91    78    10    17    40    36    27    59            
303    2    35    10    40    27    59                    
304    91    2    84    35    78    10    17    40    36    27    59
  • 写回答

3条回答 默认 最新

  • DarkAthena ORACLE应用及数据库设计方案咨询师 2022-03-05 15:35
    关注

    sql来了

    select * from ( 
    select a.id,c.val,'n'+cast(row_number()over(partition by a.id order by case when c.val is null then 1 else 0 end ,c.val) as  nvarchar(10)) new_col 
    from 
    (select id,val,col
    from #tb02 unpivot (val for col in (n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11))  as t ) as a left join 
    (select * from #tb unpivot (val for col in (w1,w2,w3,w4,w5,w6,w7,w8,w9,w10,w11))  as t) as c on a.val=c.col
    ) as n pivot (min(val) for new_col in ( n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11)) as o
    

    img

    除了你曾经提出的这些问题以外,我是真没见过拿数据库做这种事的。
    这些问题是你自己想出来的还是有什么实际应用场景?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月6日
  • 已采纳回答 3月6日
  • 修改了问题 3月4日
  • 创建了问题 3月4日

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么