Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为什么我们需要将所有字段添加到GROUPBY子句?_Sql_Sql Server_Group By - Fatal编程技术网

Sql 为什么我们需要将所有字段添加到GROUPBY子句?

Sql 为什么我们需要将所有字段添加到GROUPBY子句?,sql,sql-server,group-by,Sql,Sql Server,Group By,我有一个表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)

我有一个表
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子句中

我知道我必须在
groupby
部分中添加
A
,但是为什么它不会显示在视图中?

另外,如果我删除
GROUP BY
子句,为什么会出现相同的错误?

因为
\u A
用于
左侧(A_,CHARINDEX('(',A_)-1)
您必须将其包含在
分组依据中。
的情况并不重要。我们不必将属性添加到
分组依据中的唯一情况是当属性是聚合函数的一部分时。

因为
\u A
用于
左侧(A_u,CHARINDEX('(',A_u)-1)
您必须将其包括在
分组依据中。
情况下不重要。
我们不必将属性添加到
分组依据中的唯一情况是当属性是聚合函数的一部分时。

执行
分组依据A、C、D
。一般分组依据规则规定:如果指定了GROUP BY子句,则SELECT列表中的每个列引用必须标识一个分组列或是集合函数的参数。“不,不要按a、C、D进行
分组,因为它们是别名,所以会输出错误。按a、C、D进行
分组。常规分组规则是:如果指定了GROUP BY子句,则SELECT列表中的每个列引用必须标识分组列或是集合函数的参数。"不,不要按A、C、D分组
,因为它们是别名,所以会输出错误。只是觉得这很奇怪,我们不得不添加它。我知道它正在使用,但这不是一个有用的信息;
的输出根本不会显示
A.
。@begreen你必须意识到可能有很多对于一个
D\u,B\u,C\u
组合,行中有许多不同的
A\u
值。问题是:在这种情况下应该使用哪个值?好吧,也许我被我的真实代码蒙蔽了双眼,因为那里只有一个
A\u
。但是,如果我删除
GROUP by
,那么为什么会出现相同的错误呢?@BeGreen一旦你有了聚合乐趣在
SELECT
后面执行操作,在聚合函数之外只能有
groupby
后面的属性。好的,谢谢你,回答清楚。我们发现这很奇怪,必须添加它。我知道它正在被使用,但它不是一个有用的信息这
SELECT*FROM view;
的输出不会显示
A_
。@begreen你必须意识到,对于
D,B,C_
的一个组合,可以有许多行具有许多不同的
A_
值。问题是:在这种情况下应该使用哪一个值?好吧,也许我被我的真实代码蒙蔽了,其中只能有一个
A_
。但是,如果这样,为什么我会得到同样的错误呢我删除了
分组依据
?@BeGreen一旦您在
选择
之后有了一个聚合函数,那么在聚合函数之外只能有
分组依据
后面的属性。好的,谢谢,回答清楚。