DB2 for AS400中的简单查询

时间:2010-03-01 03:53:04

标签: sql db2 ibm-midrange

这是一个非常简单的查询(我认为),但我不能这样做。

我有一些这样的数据:

A          B        C
1        1100       5  
1        1100       5
1         500       1
2        1200       4
2        1200       4
2         600       1
3        1300       3
3        1300       3
3         700       1

我希望使用C的SUM或者类似的东西返回每个A的前B:

A     B    C
1   1100   10
2   1200   8
3   1300   6

另外,我正在使用DB2 for AS400,所以我不能使用TOP关键字。

编辑@OMG小马:

我试过像

那样的东西
SELECT
   t.A
   ,MAX(t.B)
   ,SUM(t.C)
FROM t
GROUP BY
   t.A

但它返回C的总和,而不仅仅是所选的那些:

A    B    C
1   1100  11
2   1200  9
3   1300  7

谢谢!

2 个答案:

答案 0 :(得分:4)

看起来你想要每个A值的最大B值,所以

  SELECT t.a,
         MAX(t.b)
    FROM TABLE t
GROUP BY t.a

如果您希望整个记录与AMAX(b)值相关联,请使用:

SELECT t.a,
       t.b,
       t.c
  FROM TABLE t
  JOIN (SELECT x.a,
               MAX(x.b) AS max_b
          FROM TABLE x
      GROUP BY x.a) y ON y.a = t.a
                     AND y.max_b = t.b

答案 1 :(得分:2)

在DB2上,您可以使用FETCH FIRST # ROWS ONLY 模仿TOP谓词,但它在SQL语句的结尾处