iif函数中的列在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中 &g



尝试在IIF函数中使用未包含的字段,并得到该字段不属于GROUP BY子句的错误。

SELECT IIF(T1.a = 0, 'none', T1.type) AS type, COUNT(*) AS mycnt
FROM T1
GROUP BY type

为什么?在T1。a = 0, T1中没有值。所以我想用一些东西来填充它。

我完全理解所选列必须在GROUP BY子句中,以便它知道在分组记录中有什么值。但我不是让它给我一个不可知的t1。我只想让它考虑T1的值。A在收集记录的时候再进行汇总。

还有其他填充方法吗?我有一些非常紧张的WHERE子句,所以从一个差分UNION中选择的想法看起来有点乱。

在select子句中需要有相同的GROUP BY表达式。您可以使用如下所示的代码:

SELECT IIF(T1.a = 0, 'none', T1.type) AS type, COUNT(*) AS mycnt
FROM T1
GROUP BY IIF(T1.a = 0, 'none', T1.type)

主要问题是关于GROUP BY术语的功能依赖。

您的GROUP BY项(type)不是指衍生列AS type,而是指T1.type,这意味着T1.a在功能上不依赖于GROUP BY项,除非T1。类型恰好是PRIMARY KEY或UNIQUE and NOT NULL,您的数据库理解这种功能依赖。有些数据库不理解这一点(SQL标准的一部分)。

如果你想要GROUP BY derived_type,你可以这样做:

WITH T1a AS (
SELECT IIF(T1.a = 0, 'none', T1.type) AS type
FROM T1
)
SELECT type
, COUNT(*) AS mycnt
FROM T1a
GROUP BY type
;

小提琴测试用例:

CREATE TABLE T1 ( type VARCHAR(10), a int );
WITH T1a AS (
SELECT IIF(T1.a = 0, 'none', T1.type) AS type FROM T1
)
SELECT type
, COUNT(*) AS mycnt
FROM T1a
GROUP BY type
;

相关内容

  • 没有找到相关文章

最新更新