![](/img/trans.png)
[英]Invalid Column Name Error when using Sum Case function in SQL
[英]COUNT inside CASE WHEN is causing Invalid Column error
select case
when COUNT(*)>0 THEN (select TOP 1 A.a1)
else 'none'
end
from A
where A.a1 > 10
order by A.a1
上面的代码导致以下错误:
列 'A.a1' 在 select 列表中无效,因为它不包含在聚合 function 或 GROUP BY 子句中。
我不明白为什么。
我的意图如下:如果存在 A.a1 大于 10 的行,则对它们进行排序并取顶部行的 a1 值。 如果没有这样的行,select 'none'。
编辑:这是将在子查询中使用的实际代码的简化版本。 所以,我不能使用 IF..ELSE 语句。
您有一个聚合查询,因为您有count(*)
。 这些对于子查询很棘手。 相反,您可以使用:
select (case when count(*) > 0 then A1.a1 else 'none'
end)
from A left join
(select top 1 A.a1) A1
on 1 = 1
where A1.a1 > 10
这个逻辑有点不合情理。 我假设您的实际查询更有用。
RE:列 'A.a1' 在 select 列表中无效,因为它不包含在聚合 function 或 GROUP BY 子句中。
COUNT(*) 是一个聚合。 SQL 服务器希望所有列都在 GROUP BY 中。
RE:如果存在 A.a1 大于 10 的行,则对它们进行排序并取顶部行的 a1 值。 如果没有这样的行,select 'none'。 RE:编辑:这是将在子查询中使用的实际代码的简化版本。 所以,我不能使用 IF..ELSE 语句。
代码:
SELECT ISNULL(LOWER(MAX(a1)), 'none') FROM A WHERE A.a1 > 10
我建议您尝试使用UNION ALL来解决您的问题。 下面的代码供您参考。
DECLARE @T TABLE(ID INT,NAME VARCHAR(200))
INSERT INTO @T VALUES(11,'HAI')
INSERT INTO @T VALUES(12,'H')
SELECT * FROM @T
DECLARE @VAL INT=10
SELECT TOP 1 T.NAME
FROM @T T
WHERE T.ID>@VAL
UNION ALL
SELECT 'None'
WHERE NOT EXISTS (SELECT TOP 1 ID FROM @T WHERE ID>@VAL)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.