按主键与主键和从属列分组
group by primary key vs primary key and dependant columns
CREATE TABLE T1 (a int primary key, b int);
SELECT a, b FROM T1 GROUP BY a;
--消息 8120 级别 16。列 'T1.b' 在 select 列表中无效,因为它未包含在聚合函数或 GROUP BY 子句中。
我原以为这会起作用,因为 b 列显然是一个从属列,所以按 a、b 分组显然与按 a 分组相同。
我正在使用 SQL Server 2016。
SQL 服务器不支持 GROUP BY
中的依赖列。所有数据库在某些方面都不同于标准规范。因此,尽管标准允许您执行的操作,但并非所有数据库都支持该功能。
只需使用聚合函数:
SELECT a, MAX(b) as b
FROM T1
GROUP BY a;
或将其包含在 GROUP BY
:
SELECT a, b
FROM T1
GROUP BY a, b;
而且我还应该指出 GROUP BY
在这种情况下是不必要的。我怀疑这是对更复杂的查询的引用。
如果您需要不同的值,请使用 DISTINCT 而不是分组依据
SELECT 与 T1 不同的 a、b
otehrwise ..对 group by 子句中未提及的列使用适当的聚合函数
CREATE TABLE T1 (a int primary key, b int);
SELECT a, b FROM T1 GROUP BY a;
--消息 8120 级别 16。列 'T1.b' 在 select 列表中无效,因为它未包含在聚合函数或 GROUP BY 子句中。
我原以为这会起作用,因为 b 列显然是一个从属列,所以按 a、b 分组显然与按 a 分组相同。
我正在使用 SQL Server 2016。
SQL 服务器不支持 GROUP BY
中的依赖列。所有数据库在某些方面都不同于标准规范。因此,尽管标准允许您执行的操作,但并非所有数据库都支持该功能。
只需使用聚合函数:
SELECT a, MAX(b) as b
FROM T1
GROUP BY a;
或将其包含在 GROUP BY
:
SELECT a, b
FROM T1
GROUP BY a, b;
而且我还应该指出 GROUP BY
在这种情况下是不必要的。我怀疑这是对更复杂的查询的引用。
如果您需要不同的值,请使用 DISTINCT 而不是分组依据
SELECT 与 T1 不同的 a、b
otehrwise ..对 group by 子句中未提及的列使用适当的聚合函数