在使用COMPUTE时,遇到如下提示信息:
SQL 执行错误。
已执行 SQL 语句:SELECT 序号, 考核时间, 考核名称, 评定结果 FROM 考核成绩表 COMPUTE COUNT(考核时间) BY 评定结果
错误源:.NET SqlClient Data Provider
错误信息:在排序依据列表中没有找到COMPUTE BY子句中的某一项。计算依据列表中的所有表达式也必须同时出现在排序依据列表中。
将语句修改为:
SELECT 序号, 考核时间, 考核名称, 评定结果 FROM 考核成绩表 ORDER BY 评定结果 COMPUTE COUNT(考核时间) BY 评定结果
后可以正常执行。但又遇到一个问题,似乎得到的结果不正确。后面发现是因为我是在表的SQL窗口中执行的语句,而带有COMPUTE的语句返回的是多个结果集,需要在单独的查询窗口中执行才能得到全部的结果。新建一个查询后再执行命令得到一堆的结果集,貌似正确了。
又试图将两个字段相加的结果来做为COMPUTE BY的依据字段,因为其中一个字段有NULL值,所以得出来的结果并不正确,语句如下:
SELECT 序号, 考核时间, 考核名称, 课目, 评定结果
FROM 考核成绩表
ORDER BY CONVERT(varchar, 考核时间,120) + ISNULL(考核名称, "")
COMPUTE COUNT(评定结果) BY CONVERT(varchar, 考核时间,120) + ISNULL(考核名称, "")
其中将考核名称替换成ISNULL(考核名称, ""),结果出现错误:
消息 1038,级别 15,状态 4,第 4 行
缺少对象或列名,或者对象或列名为空。对于 SELECT INTO 语句,请确保每列均具有名称。对于其他语句,请查找空的别名。不允许使用定义为 "" 或 [] 的别名。请添加名称或单个空格作为别名。
若是将ISNULL(考核名称, "")换成ISNULL(考核名称, " ")则提示:
消息 207,级别 16,状态 1,第 3 行
列名 ' ' 无效。
消息 207,级别 16,状态 1,第 4 行
列名 ' ' 无效。
消息 163,级别 15,状态 1,第 4 行
计算依据列表与排序依据列表不匹配。
而将CONVERT(varchar, 考核时间,120) + ISNULL(考核名称, "")写成(CONVERT(varchar, 考核时间,120) + ISNULL(考核名称, "")) AS 别名后出现如下提示:
消息 156,级别 15,状态 1,第 4 行
关键字 'as' 附近有语法错误。
后面单独执行SELECT CONVERT(varchar, 考核时间,120) + ISNULL(考核名称, "") FROM 考核成绩表
仍然是消息1038,于是注意到应当用单引号而不是双引号,改过来后结果正常。
SQL Server 2005使用手记
最新推荐文章于 2022-08-19 09:31:16 发布