如何在给定1列的情况下仅显示1行在SQL中具有相同的值

时间:2013-04-02 16:40:17

标签: sql db2

我现在有一个示例输出:我们称之为表X并且属性为x.name,x.title,x.best x.lowest

NAME                 TITLE                     BEST            LOWEST 
-------------------- ------------------------- --------------- -------
Andy Aardverk        Avarice is Good           CARP             215.95
Andy Aardverk        Avarice is Good           YRB Bronze       215.95
Andy Aardverk        Yon-juu Hachi             CARP              41.95
Andy Aardverk        Yon-juu Hachi             YRB Bronze        43.95

鉴于最后一列的重复值为215.95,我想只显示包含相同值的2行中的1行。所以我希望它能显示出类似的东西

NAME                 TITLE                     BEST            LOWEST 
-------------------- ------------------------- --------------- -------
Andy Aardverk        Avarice is Good           CARP             215.95
Andy Aardverk        Yon-juu Hachi             CARP              41.95
Andy Aardverk        Yon-juu Hachi             YRB Bronze        43.95

我知道我可以取出X.best,它会给我一个关于X.lowest的唯一行,但是我稍后需要另一个查询的属性X.best。 我试过了

select distinct x.name, x.title, x.best, x.lowest

但它没有帮助。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:1)

如果最低列重复,或者名称,标题和最低列是否重复,是否要显示单行?

通常情况下,您有要保留哪一行的标准,但如果无关紧要,则应使用GROUP BYMAX的简单MIN。这假设您关心的名称和标题也是不同的:

SELECT name, title, MIN(best) best, lowest
FROM tablex
GROUP BY name, title, lowest

SQL Fiddle Demo

如果您只关心不同的最低字段,则可以使用ROW_NUMBER()

SELECT name, title, best, lowest
FROM (
     SELECT name, title, best, lowest, 
        ROW_NUMBER() OVER (PARTITION BY lowest ORDER BY lowest) rn
     FROM tablex
  ) X
WHERE rn = 1

More Fiddle