【问题标题】:Sql select top querysql选择顶部查询
【发布时间】:2015-01-08 22:13:28
【问题描述】:

大家好,我有以下问题:

   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) 

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

如果我选择前 1 则 sum(CommitmentLog.CommitAmt) 它应该返回 1500 并且
如果我选择前 2 名 sum(CommitmentLog.CommitAmt) 它应该返回 1500 + 500 = 2000

【问题讨论】:

  • "Top" 在计算结果集之后过滤前 N 行。它不会影响结果集本身。
  • 请提供样品
  • CommitmentLog.CommitAmt 在表中有多个值。我想和 top(1)、top(2) 等相加......如果我对 top(1) 求和,那么我得到的结果不正确,就像查询正在运行一样 (top(2)
  • 对值求和的位置。
  • sum(commitmentlog.commitamt)

标签: mysql sql sql-server


【解决方案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

【讨论】:

    猜你喜欢
    • 2023-04-07
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    相关资源
    最近更新 更多