在SQL中出错GROUP BY

时间:2014-02-14 19:47:40

标签: sql sql-server sql-server-2005

这是我的查询回复。

id_project   filename
25           daf5c857-b4f3-4977-b2b7-fe61903cbc1f_3.jpg        
26           4452ff57-966b-49ec-9b90-ea8a78a7dad0_1.jpg        
26           4668ba37-8fea-48c8-955b-c6d71a8973dc_2.jpg        
26           9ee0f078-16db-4e4a-895b-54ab307b1fa6_3.jpg        

我想展示一个26场。我使用了这个选择代码:

SELECT id_project, filename 
FROM image 
GROUP BY id_project

但显示此错误

  

Msg 8120,Level 16,State 1,Line 2
  列'image.filename'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

我使用此代码进行求解,但它显示与原始查询相同的结果集。

select distinct id_project, filename 
from image

1 个答案:

答案 0 :(得分:2)

要为每个id_project显示一行,并且只需要将其中一个匹配filename包含在聚合中。

你说它“没关系。只显示26中的一个”。这将返回按字母顺序排列的最新版本。

SELECT id_project,
       MAX(filename) AS filename
FROM   image
GROUP  BY id_project 

或者您可以重写以获取ANY aggregate

WITH T
     AS (SELECT *,
                ROW_NUMBER() OVER (PARTITION BY id_project 
                                       ORDER BY id_project) AS RN
         FROM   image)
SELECT id_project,
       filename
FROM   T
WHERE  RN = 1