我的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但我有个奇怪的错误:
La colonna 'CODIFICHE_FARMACI.Principio_Attivo‘nonèvalida nell’‘elenco di selezione perchénonèinclusa néin una funzione di selezione nénella clausola组。
英文本:
列'CODIFICHE_FARMACI.Principio_Attivo‘在select列表中无效,因为它既没有包含在聚合函数中,也没有包含在GROUP BY子句中。
编辑:通过这个查询,我得到了这个结果

如您所见,我复制了Farmaco列(有两次ABBA,ABESART)
编辑我想要的结果:
|FARMACO|
ABBA
ABESART
ABILIFY发布于 2017-02-04 09:03:54
如果要选择前60个Farmaco值而只显示不同的值,则可以尝试使用SELECT DISTINCT
SELECT DISTINCT TOP 60 Farmaco
FROM [dbo].[CODIFICHE_FARMACI]
ORDER BY Farmaco请注意,如果您的记录确实是重复的,那么它就意味着您的数据没有规范化。可能只对某些列相同,而对其他列则不一样。
发布于 2017-02-04 09:10:48
试试这个:
SELECT Top 60
a.Farmaco
FROM [dbo].[CODIFICHE_FARMACI] A
GROUP BY A.Farmaco 发布于 2017-02-05 11:39:11
SELECT TOP 60 cf.Farmaco
FROM CODIFICHE_FARMACI AS cf
GROUP BY cf.Farmaco
ORDER BY cf.Farmaco当您使用GROUP时,您将从列/s得到一个不同的值,后面跟着GROUP BY (在您的例子中是Farmaco)。
首先执行FROM语句,然后使用CODIFICHE_FARMACI别名cf检索的数据集将由cf.Farmaco分组。
SELECT命令将只检索cf.Farmaco列值,而ordered列值将按顺序升序(因为ordered表达式具有默认的升序)。在最后,前60只过滤数据集中的60行。
当您指定SELECT *并且您有GROUP BY子句时,您将遇到一个问题,因为在GROUP中写入的每一列都必须位于SELECT语句处。
还可以向SELECT语句中添加聚合函数(如SUM、MIN、MAX等)的结果的列。
https://stackoverflow.com/questions/42038407
复制相似问题