Sql选择顶级查询

时间:2014-11-12 06:19:48

标签: mysql sql sql-server

大家好我有以下问题:

   SELECT TOP(1) CommitmentLog.CommitAmt
FROM   leveldetails
       INNER JOIN CommitmentLog
               ON leveldetails.App_ID = CommitmentLog.app_id
                  AND leveldetails.Intro_ID = '999'
                  AND leveldetails.Side = 'right'
                  AND CommitmentLog.flag != '1'
                  AND CommitmentLog.CommitNo NOT IN (SELECT commit_no
                                                     FROM   binary_bal
                                                     WHERE  Intro_ID = '999'
                                                            AND Side = 'right'
                                                            AND llevel BETWEEN 1 AND 100000) 

第1行CommitAmt值:1500
第二行CommitAmt值:500
如果我选择CommitmentLog.CommitAmt的前1个总和,则返回值为2000而不是1500 如果我选择CommitmentLog.CommitAmt的前两个总和,则返回值2000,这是正确的

  

如果我选择前1然后总和(CommitmentLog.CommitAmt)   它应该返回1500和
  如果我选择前2然后   sum(CommitmentLog.CommitAmt)它应该返回1500 + 500 = 2000

1 个答案:

答案 0 :(得分:1)

您想要对结果集的前N个求和吗?试试这个

SELECT SUM(t1.CommitAmt) from (SELECT TOP(1) CommitmentLog.CommitAmt
                                  FROM   leveldetails
                                    INNER JOIN CommitmentLog
                                      ON leveldetails.App_ID = CommitmentLog.app_id
                                      AND leveldetails.Intro_ID = '999'
                                      AND leveldetails.Side = 'right'
                                      AND CommitmentLog.flag != '1'
                                      AND CommitmentLog.CommitNo NOT IN (SELECT commit_no
                                                     FROM   binary_bal
                                                     WHERE  Intro_ID = '999'
                                                            AND Side = 'right'
                                                            AND llevel BETWEEN 1 AND 100000)
                              ) AS t1