sql-server – 为什么GROUP BY语句中的通配符不起作用?
|
我试图使以下SQL语句工作,但我得到一个语法错误: SELECT A.*,COUNT(B.foo) FROM TABLE1 A LEFT JOIN TABLE2 B ON A.PKey = B.FKey GROUP BY A.* 这里,A是一个包含40列的宽表,我希望尽可能避免在GROUP BY子句中列出每个列名.我有很多这样的表,我必须运行类似的查询,所以我将不得不写一个存储过程.什么是最好的方法来解决这个问题? 我正在使用MS SQL Server 2008. 解决方法SQL中不允许使用GROUP BY A. *.您可以通过使用分组所在的子查询来绕过此,然后加入: SELECT A.*,COALESCE(B.cnt,0) AS Count_B_Foo
FROM TABLE1 AS A
LEFT JOIN
( SELECT FKey,COUNT(foo) AS cnt
FROM TABLE2
GROUP BY FKey
) AS B
ON A.PKey = B.FKey ;
SQL-2003标准中有一个功能,即在SELECT列表中允许不在GROUP BY列表中的列,只要它们在功能上依赖于它们.如果该功能已在SQL-Server中实现,则您的查询可能已写为: SELECT A.*,COUNT(B.foo) FROM TABLE1 A LEFT JOIN TABLE2 B ON A.PKey = B.FKey GROUP BY A.pk --- the Primary Key of table A 不幸的是,这个功能还没有实现,甚至在SQL-Server 2012版本中也没有实现 – 据我所知,并没有在任何其他DBMS中实现.除了拥有它但却不充分的MySQL之外(不充分地:上述查询将起作用但引擎不会检查功能依赖性,其他错误编写的查询将显示错误的,半随机结果). 正如@Mark Byers在评论中告知我们的那样,PostgreSQL 9.1 added a new feature就是为此而设计的.它比MySQL的实现更具限制性. (编辑:百科站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 详解HTML中字体使用line-height依然不能垂直居中解决办法
- 如何使用SQL(BigQuery)计算TF / IDF
- SQL * Plus不执行SQL Developer所执行的SQL脚本
- sql-server-2008 – 是否可以在SQL Server 2008中选择特定的
- 某年第一周实施日期实现方法
- sql-server – uncoditioned Count(*)vs System表
- sql-server – 使用FreeTDS连接到MS SQL Server:错误20002
- sql – 如何清除Oracle中的所有缓存项
- sql server:删除所有表的所有行
- sql-server – 是否可以为数据库创建别名或同义词?

