您的位置:首页 > 其它

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

2014-05-20 17:16 288 查看
--背景

有时,需要用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  

--结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: