选择列表中的列无效

Posted

技术标签:

【中文标题】选择列表中的列无效【英文标题】:Column is invalid in select list 【发布时间】: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 有一行,请从选择中删除它或使用MINMAX 之类的聚合来仅获得一个 你想得对..它会给你最高的价值。你的加入看起来很遥远。应该是FROM dbo.LimitAllocation AS la JOIN dbo.LimitExtension AS le ON la.Limit = le.Limit JOIN dbo.SourceEntity se ON le.SourceEntity = se.SourceEntity 【参考方案1】:

尝试这样做,您也会在结果集中获得额外的列。

select *,convert(varchar(100), SourceName) AS SourceEntity
from (
  SELECT distinct
    la.Limit AS keyfield, 
    (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
) as p;

【讨论】:

谢谢帕尼。我正在尝试您的代码。但我收到一个错误。 SourceName 不能绑定在第一行:select *,convert(varchar(100), SourceName) AS SourceEntity。我也尝试过 se.OID 并且我得到了同样的错误。似乎此代码无法访问 se 表。我喜欢子查询的想法。你知道我该如何解决这个错误吗?

以上是关于选择列表中的列无效的主要内容,如果未能解决你的问题,请参考以下文章

不仅仅是另一个“选择列表中的列无效”错误

SQL:选择列表中的列无效,因为它不包含在聚合函数或 GROUP BY 子句中[关闭]

选择列表中的列“X”无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中

选择列表中的列无效,因为该列没有包含在聚合函数或 GROUP BY 子句中

选择列表中的列无效,因为该列没有包含在聚合函数或 GROUP BY 子句中

选择列表中的列……无效,因为该列没有包含在聚合函数或 GROUP BY 子句中