有效地包含不在SQL查询的Group By中的列
发布时间:2021-01-23 02:13:49 所属栏目:MsSql教程 来源:网络整理
导读:特定 表A. Id INTEGERName VARCHAR(50) 表B. Id INTEGERFkId INTEGER ; Foreign key to Table A 我想计算每个FkId值的出现次数: SELECT FkId,COUNT(FkId) FROM B GROUP BY FkId 现在我只想输出表A中的Name. 这不起作用: SELECT FkId,COUNT(FkId),a.NameFROM
|
特定 表A. Id INTEGER Name VARCHAR(50) 表B. Id INTEGER FkId INTEGER ; Foreign key to Table A 我想计算每个FkId值的出现次数: SELECT FkId,COUNT(FkId) FROM B GROUP BY FkId 现在我只想输出表A中的Name. 这不起作用: SELECT FkId,COUNT(FkId),a.Name FROM B b INNER JOIN A a ON a.Id=b.FkId GROUP BY FkId 因为a.Name不包含在GROUP BY子句中(生成在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句错误中). 重点是从这样的输出转移 FkId Count 1 42 2 25 输出像这样 FkId Count Name 1 42 Ronald 2 22 John 对于该错误消息,在SO上存在相当多的匹配,但是例如https://stackoverflow.com/a/6456944/141172有一些评论,如“将在桌面上产生3次扫描,而不是1,因此不会缩放”. 如何在查询输出中有效地包含联接表B中的字段(与FkId具有1:1的关系)? 解决方法你可以尝试这样的事情:;WITH GroupedData AS
(
SELECT FkId,COUNT(FkId) As FkCount
FROM B
GROUP BY FkId
)
SELECT gd.*,a.Name
FROM GroupedData gd
INNER JOIN dbo.A ON gd.FkId = A.FkId
创建一个CTE(公用表表达式)来处理表B上的分组/计数,然后将该结果(每个FkId一行)连接到表A,并从表A中获取更多列到最终结果集中. (编辑:阳江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- SQL游标的功能是什么,如何使用?
- sql-server – 为什么我需要两个SQL Server Service Broker
- 人工智能在网络安全领域的四大应用场景
- 设置组策略实现Windows桌面显示计算机信息
- sql-server – 通过Internet连接到SQL服务器
- 体彩福彩足彩双色球缩水过滤软件,中奖率提百倍
- sql-server-2008 – 托管我的网站和数据库与不同的提供商是
- Linux之父终于无法忍受 痛斥SCO“无耻”
- 如何为 Element UI 里的 autosize textarea 设置高度
- sql-server – 在同一个VM上运行2个SQL Server 2014实例是否

