SQL:选择列表中的列无效,因为它不包含在聚合函数或 GROUP BY 子句中[关闭]
Posted
技术标签:
【中文标题】SQL:选择列表中的列无效,因为它不包含在聚合函数或 GROUP BY 子句中[关闭]【英文标题】:SQL: Column invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause [closed] 【发布时间】:2016-05-11 18:22:42 【问题描述】:列“DocumentMetadata.Custodian”在选择列表中无效,因为它既不包含在聚合函数也不包含在 GROUP BY 子句中。
SELECT Custodian Field
,FlagName
,count(1) Counts
FROM DocumentMetadata t
INNER JOIN documentreview.dbo.documentflags df ON t.documentid = df.documentid
INNER JOIN documentreview.dbo.flags f ON df.flagid = f.flagid
WHERE t.documentId IN (
SELECT DocumentId
FROM DocumentReview.dbo.DocumentsInSample
WHERE SampleId = 10039
)
AND df.flagid = 10117
UNION
SELECT Custodian Field
,f2.FlagName
,count(1) Counts
FROM DocumentMetadata t2
INNER JOIN DocumentReview.dbo.DocumentVetting dv2 ON t2.documentid = dv2.documentid
INNER JOIN DocumentReview.dbo.FlagRelevancyMapping frm2 ON frm2.CategoryFolderId = dv2.CategoryId
INNER JOIN DocumentReview.dbo.Flags f2 ON f2.FlagId = frm2.FlagId
WHERE dv2.DocumentId IN (
SELECT DocumentId
FROM DocumentReview.dbo.DocumentsInSample
WHERE SampleId = 10039
)
AND f2.FlagId IN (10117)
AND f2.IsCategoryFlag = 1
AND (
frm2.Relevancy = dv2.Relevancy
OR (
frm2.Relevancy = 'MR'
AND dv2.MaybeResolved = 1
)
OR (
frm2.Relevancy = 'CCA'
AND dv2.CrossCheckAgree = 1
)
OR (
frm2.Relevancy = 'CCD'
AND dv2.CrossCheckDisagree = 1
)
OR (
frm2.Relevancy = 'VM'
AND dv2.VettingMismatch = 1
)
OR (
frm2.Relevancy = 'VMR'
AND dv2.VettingMismatchResolved = 1
)
)
GROUP BY Custodian
,FlagName
ORDER BY Custodian
,FlagName
【问题讨论】:
也许您应该尝试打印它生成的 SQL 脚本并自己查看它。 Stack Overflow 不是您可以提交代码并神奇地修复它的个人调试器。 我做到了,但我找不到任何问题。因此,我在这里问这个问题。如果您无法提供帮助,请不要发表评论 您需要帮助我们帮助您。如果您不能这样做,请不要发布问题。 这里有很多东西会让大多数代码审查失败。您正在通过指定大小转换为 varchar,这意味着它将使用默认值。你知道那个默认值吗?您是否 100% 确定 MS 永远不会改变它?您到处都在使用 ANSI-89 样式的连接。 sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/…这也是开放sql注入的。 bobby-tables.com这东西需要彻底检修/重写。 你说是在执行之前把动态sql打印出来了。这就是问题所在。也许您可以发布其中的内容,以便我们为您提供帮助。 【参考方案1】:删除 UNION 中底部查询周围的括号。
否则,您将创建一个没有别名的派生表。
错误的原因是因为你根本没有关闭那个括号。
如果“MR”是一个值而不是列名,那么您需要将它(以及所有其他类似的)括在双单引号中,如下所示:''MR''
【讨论】:
他的查询的另一个问题是在OR
语句中:frm2.Relevancy = MR
- 引用不带引号的字符串值。
是的,除非这些是明确的列名...
所以整个查询本身被写成一个字符串,这就是为什么值“MR”不在引号中的原因。我没有写这个查询。我从一个旧的 s-s-rs 项目中使用它并调整了一些东西,所以我不必从头开始编写。以上是关于SQL:选择列表中的列无效,因为它不包含在聚合函数或 GROUP BY 子句中[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server报错:选择列表中的列无效,因为该列没有包含在聚合函数或 GROUP BY 子句中
选择列表中的列……无效,因为该列没有包含在聚合函数或 GROUP BY 子句中
选择列表中的列无效,因为该列没有包含在聚合函数或 GROUP BY 子句中
列“在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中”]]