【发布时间】:2015-10-23 07:09:56
【问题描述】:
我正在尝试将Nvarchar 列添加到我在结果集中需要的选择列表中。但是当我执行我得到这个错误:
列“dbo.SourceEntity.SourceName”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
我不需要汇总此列或 group by 它。如何将此列放入我的结果集中?这是我的代码:
SELECT distinct
la.Limit AS keyfield,
convert(varchar(100), se.SourceName) AS SourceEntity,
(la.Limit) AS Limit,
SUM(la.ARLimit) AS LAARLimit,
SUM(la.MTMLimit) AS LAMTMLimit,
SUM(la.Volume) AS LAMaxVolume,
SUM(la.MaxTenor) AS LAMaxTenor,
SUM(le.ARLimit) AS LEARLimit,
SUM(le.MTMLimit) AS LEMTMLimit,
SUM(le.Volume) AS LEMAxVolume,
SUM(le.MaxTenor) AS LEMaxTenor, SUM(la.ARLimit) + SUM(le.ARLimit) AS [ARLimit],
SUM(la.MTMLimit) + SUM(le.MTMLimit) AS [MTMLimit],
SUM(la.Volume) + SUM(le.Volume) AS [Volume],
SUM(la.MaxTenor) + SUM(le.MaxTenor) AS [MaxTenor]
FROM
dbo.LimitAllocation AS la
INNER JOIN
dbo.LimitExtension AS le ON la.Limit = le.Limit AND la.Limit = le.Limit
inner join
dbo.SourceEntity as se on la.SourceEntity = le.SourceEntity
GROUP BY la.Limit
【问题讨论】:
-
SourceName 是常量吗?如果您使用 Group By,那么您选择的所有内容都必须是按值分组或聚合值。另外,查看与 se 的连接。你是不是打错了什么?
-
这个专栏
I do not need to group by是什么意思?如果按它分组,分组结果不正确吗?另外,您使用的是什么版本的 SQL Server? -
此列中的数据与 la.Limit 的关系是什么,即 la.Limit 中的每个更改都是唯一的还是不止一个?
-
您应该将
SourceEntity添加到您的组中,或者将其从选择中删除。如果您有很多SourceEntities in a Limit,那么您将为每个SourceEntities获得一行,如果您不希望每个SourceEntities有一行,请从选择中删除它或使用MIN或MAX之类的聚合来仅获得一个 -
你想得对..它会给你最高的价值。你的加入看起来很遥远。应该是
FROM dbo.LimitAllocation AS la JOIN dbo.LimitExtension AS le ON la.Limit = le.Limit JOIN dbo.SourceEntity se ON le.SourceEntity = se.SourceEntity
标签: sql sql-server select group-by aggregate-functions