【问题标题】:error in query to get balance查询中的错误以获取余额
【发布时间】:2014-07-01 13:21:10
【问题描述】:

我有一个包含以下字段的 Cash 表:doc_num,narration,date,creditor,debtor 现在我想将 sum(creditor-debtor) 显示为每行的余额。还显示以前的余额 像这样:

--------------------------------------------------------------------------------------
doc_num-------date----------narration------------credit-------debtor---balance
--------------------------------------------------------------------------------------
                         previous balance                                 2000    
 1       2014/06/10        remit             5000          0              5000
 2       2014/06/12        bar                  0          2000           3000
 3       2014/06/15        remit             1000          0              4000

这是我的查询:

SELECT  ''                  AS docnum,
        ''                  AS c_date,
        'previous balance'  AS narration,
        " "                 AS creditor,
        " "                 AS debtor,
        Sum(creditor-debtor),
        "c_date< ' " &  2014/06/10  & "'" AS Balance 
FROM    Cash 
UNION 
SELECT  doc_num,
        c_date,
        narration,
        creditor,
        debtor,
        Sum(creditor-debtor),
        "doc_num<=" & doc_num AS Balance 
FROM    Cash
WHERE   (((Cash.c_date) Between ("2014/06/10") And ("2014/06/15")))
ORDER BY docnum;

我遇到了这个错误: 您尝试执行的查询不包括指定的表达式 'doc_num' 作为聚合的一部分 我在访问(mdb)中使用此查询 什么是正确的查询? 谢谢

【问题讨论】:

  • 在列出所有非聚合列的 where 子句之后缺少 group by 语句。
  • 这是 ms 访问...正如错误所说:)
  • 您使用的是 SUM,因此您需要使用 group by

标签: sql ms-access balance


【解决方案1】:

也许是这样:'' 和 " " 有点让我失望。

SELECT  ''                  AS docnum,
        ''                  AS c_date,
        'previous balance'  AS narration,
        " "                 AS creditor,
        " "                 AS debtor,
        Sum(creditor-debtor),
        "c_date< ' " &  2014/06/10  & "'" AS Balance 
FROM    Cash 
Group by '','','previous balance', " ", " ", "c_date< ' " &  2014/06/10  & "'"
UNION 
SELECT  doc_num,
        c_date,
        narration,
        creditor,
        debtor,
        Sum(creditor-debtor),
        "doc_num<=" & doc_num AS Balance 
FROM    Cash
WHERE   (((Cash.c_date) Between ("2014/06/10") And ("2014/06/15")))
GROUP BY doc_num,
        c_date,
        narration,
        creditor,
        debtor,
        "doc_num<=" & doc_num 
ORDER BY docnum;

【讨论】:

  • 感谢您的代码。我在 ms 访问中使用此代码再次无法正常工作。您运行此代码吗?
  • 不,因为我没有你有的表和数据库。我建议将代码分解为两个单独的 select 语句,并分别尝试每个语句,这样您就可以一次专注于一个语句以解决问题。我知道您的问题的根源在于 group by;但考虑到这些是如何设置的,我对语法并不肯定。
  • 好的,根据我的表格,您可以编写查询以从每行的贷方和债务方获取余额吗?这对我很重要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-02
  • 1970-01-01
  • 2021-12-08
  • 2021-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多