当派生表为空时显示替代结果



我有这个sql代码,每当表为空时,我都会尝试显示一个替代值,或者当它不是时,顶行的单列

select top 1 case when count(*)!=0 then derrivedTable.primarykey
else 0 end endCase
from
(   
select top 1 m.primarykey
from mytable m
where 0=1
)derrivedTable

问题是,当我运行它时,我收到错误消息"列'derrivedTable.primarykey'在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中。 但是当我把'derrivedTable.primarykey'放在groupby子句中时,我只得到一个空表。 有人有解决方案吗? 提前致谢

您可以使用聚合:

select coalesce(max(m.primarykey), 0)
from mytable m;

没有group by的聚合查询始终只返回一行。 如果表为空(或所有行都被过滤掉(,则聚合函数(COUNT()除外(返回NULL- 可以使用COALESCE()将其转换为值。

这样的结构让我担心。 如果您使用它来设置插入上的主键,那么您应该了解identity列或序列。 数据库将为您完成工作。

你能试试下面的脚本吗-

SELECT 
CASE
WHEN COUNT(*) = 1 THEN derrivedTable.primarykey
ELSE 0
END endCase
FROM
(
SELECT TOP 1 m.primarykey
FROM mytable m
WHERE 0 = 1
) derrivedTable
derrivedTable.primarykey;

最新更新