Sql server T-SQL/SQL Server中带有TOP的分组错误

Sql server T-SQL/SQL Server中带有TOP的分组错误,sql-server,tsql,Sql Server,Tsql,我的SQL Server数据库中有这个表 CREATE TABLE [dbo].[CODIFICHE_FARMACI] ( [Principio_Attivo] [nvarchar](250) NULL, [LanguageID] [nvarchar](50) NOT NULL, [Codice] [nvarchar](50) NOT NULL, [Confezione_rif] [nvarchar](1000) NULL, [ATC] [nvarchar

我的SQL Server数据库中有这个表

CREATE TABLE [dbo].[CODIFICHE_FARMACI]
(
    [Principio_Attivo] [nvarchar](250) NULL,
    [LanguageID] [nvarchar](50) NOT NULL,
    [Codice] [nvarchar](50) NOT NULL,
    [Confezione_rif] [nvarchar](1000) NULL,
    [ATC] [nvarchar](100) NULL,
    [Farmaco] [nvarchar](1000) NULL,
    [Confezione] [nvarchar](1000) NULL,
    [Ditta] [nvarchar](100) NULL,

    CONSTRAINT [PK_CODIFICHE_FARMACI] 
        PRIMARY KEY CLUSTERED ([LanguageID] ASC, [Codice] ASC)
)
现在,我想通过
Farmaco
列从这个表中提取前60个记录组

所以我写了这个查询:

SELECT TOP 60 * 
FROM CODIFICHE_FARMACI 
GROUP BY Farmaco
但我有一个奇怪的错误:

“农业法典化”原则包括克劳索拉集团旗下的农学院

英文:

列“codocateche_FARMACI.princiio_Attivo”在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中

编辑:通过这个查询,我得到了这个结果

如您所见,我复制了Farmaco列(有两次ABBA,ABESART)

按我想要的结果编辑:


如果要在仅显示不同值的情况下选择前60个
Farmaco
值,可以尝试使用
select distinct

SELECT DISTINCT TOP 60 Farmaco 
FROM [dbo].[CODIFICHE_FARMACI]
ORDER BY Farmaco
请注意,如果您确实有重复的记录,则表示您的数据未规范化。可能,只有某些列的重复项是相同的,而其他列的重复项则不同。

尝试以下方法:

SELECT Top 60
  a.Farmaco
  FROM [dbo].[CODIFICHE_FARMACI] A
GROUP BY A.Farmaco 
当您使用GROUPBY时,您将从后跟GROUPBY(在您的例子中是Farmaco)的列中获得一个不同的值

首先,将执行FROM语句,然后,现在检索到的数据集(别名为cf FROM che_FARMACI)将按cf.Farmaco分组

SELECT命令将仅检索cf.Farmaco列值,其中ORDER BY将按升序排列(因为ORDER BY表达式具有默认的升序)。最后,TOP 60将只过滤数据集中的60行

当您指定SELECT*并且使用GROUP BY子句时,您将遇到问题,因为GROUP BY中写入的每一列都必须位于SELECT语句中


您还可以向SELECT语句中添加作为聚合函数(如SUM、MIN、MAX等)结果的列。

能否向我们展示输入和输出示例?您的所有列都是nvarchar。按某个字段分组意味着您希望接收此字段的不同值以及其他字段的一些聚合值(总和、平均值、最小值、最大值)。您希望接收nvarchar字段的聚合值是多少?向我们展示您实际需要的输出。请注意,这些记录对并非在所有列中都相同。虽然此代码可以回答问题,但提供有关如何和/或为什么解决问题的附加上下文将提高答案的长期价值。虽然您可能已经解决了此用户的问题,对于将来遇到此问题的用户来说,仅使用代码的答案没有多大帮助。请编辑您的答案,解释您的代码解决原始问题的原因。请使用`符号标记
内联代码
元素,使您的代码更具可读性。非常感谢。
SELECT Top 60
  a.Farmaco
  FROM [dbo].[CODIFICHE_FARMACI] A
GROUP BY A.Farmaco 
SELECT TOP 60 cf.Farmaco
FROM CODIFICHE_FARMACI AS cf
GROUP BY cf.Farmaco
ORDER BY cf.Farmaco