尝试在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
;