我有一个表test1
和一个查看view1
,我想知道为什么会得到这样的结果:
CREATE TABLE test1 (
A_ VARCHAR(10),
B_ VARCHAR(10),
C_ VARCHAR(10),
D_ VARCHAR(10)
);
CREATE VIEW view1 AS
SELECT
CASE
WHEN D_ in ('false') THEN LEFT(A_, CHARINDEX('(', A_) -1)
ELSE D_
END AS D,
MIN(B_) B,
CASE
WHEN C_ IS NOT NULL THEN '0'
ELSE C_
END AS C
FROM test1
GROUP BY
D_,
B_,
C_;
列'test1.A_'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。
我知道我必须在A_
部分添加GROUP BY
,但为什么不会在视图中显示?
另外,如果删除GROUP BY
子句,为什么会出现同样的错误?
答案 0 :(得分:2)
由于_A
中使用LEFT(A_, CHARINDEX('(', A_) -1)
,您必须将其包含在GROUP BY
中。它在CASE
中并不重要。我们不必将属性添加到GROUP BY
的唯一情况是属性是聚合函数的一部分。