将字段名和排序后的结果一块输出(bcp命令时会用到这一功能)

--背景

有时,需要用bcp命令将排序后的查询结果生成一个excel附件,放在本地。

这时,需要将字段名和排序后的查询结果一起放在本地。


--试验步骤:

SELECT '平均消耗CPU 时间(ms)' 

UNION ALL
 SELECT CAST( avg_elasped_time AS NVARCHAR(100)) 
 FROM dba.dbo.bdd_temp_find_top_select_cpu  

 order by  avg_elasped_time desc

执行报错:

消息 207,级别 16,状态 1,第 5 行
Invalid column name 'avg_elasped_time'.
消息 104,级别 16,状态 1,第 5 行
ORDER BY items must appear in the select list if the statement contains a UNION, INTERSECT or EXCEPT operator.


--在第一个SELECT 字段名后加 ’AS avg_elasped_time‘可以了。

 SELECT '平均消耗CPU 时间(ms)'   AS avg_elasped_time
UNION ALL
 SELECT CAST( avg_elasped_time AS NVARCHAR(100)) 
 FROM dba.dbo.bdd_temp_find_top_select_cpu  
 order by  avg_elasped_time desc


--查询结果如下


但是发现,一个问题:

14701前面的都按降序排列了,但是14701是最大的,却排在了后面。


--改正(将行号和该字段值拼接,然后取除最后一位数的前几位):

  SELECT '平均消耗CPU 时间(ms)'  AS avg_elasped_time
UNION ALL
 SELECT SUBSTRING(CAST( avg_elasped_time AS NVARCHAR(100)) +CAST(ROW_NUMBER() OVER (ORDER BY avg_elasped_time DESC) AS NVARCHAR(100)),1,LEN(avg_elasped_time))
 FROM dba.dbo.bdd_temp_find_top_select_cpu 


--结果如下:



--可以通过以下语句,验证上面数值的是否正确

 SELECT CAST( avg_elasped_time AS NVARCHAR(100)) ,
CAST(ROW_NUMBER() OVER (ORDER BY avg_elasped_time DESC) AS NVARCHAR(100)),
CAST( avg_elasped_time AS NVARCHAR(100)) +CAST(ROW_NUMBER() OVER (ORDER BY avg_elasped_time DESC) AS NVARCHAR(100)),
SUBSTRING(CAST( avg_elasped_time AS NVARCHAR(100)) +CAST(ROW_NUMBER() OVER (ORDER BY avg_elasped_time DESC) AS NVARCHAR(100)),1,LEN(avg_elasped_time))
 FROM dba.dbo.bdd_temp_find_top_select_cpu  


--结果


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值