我有这个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;