gpt4 book ai didi

SQL查询选择具有非聚合值和聚合函数表达式的列

转载 作者:行者123 更新时间:2023-12-04 16:12:01 25 4
gpt4 key购买 nike

使用的表:

1) v(date d, name c(25), desc c(50), debit n(7), credit n(7))

name in 'v' refers name in vn table

2) vn(date d, name c(25), type c(25), obal n(7))

name in 'vn' is a primary key and different names are grouped by type

ex: names abc, def, ghi belongs to type 'bank', names xyz, pqr belongs to type 'ledger', ...



我有一个这样的查询:
SELECT vn.type, SUM(vn.obal + IIF(v.date < sd, v.credit-v.debit, 0)) OpBal, ;
SUM(IIF(BETWEEN(v.date, sd, ed), v.credit-v.debit, 0)) CurBal ;
FROM v, vn WHERE v.name = vn.name GROUP BY vn.type ;
ORDER BY vn.type HAVING OpBal + CurBal != 0

它工作正常,但唯一的问题是,obal 是一个值,在表 'vn' 中每个名称只输入一次,但是对于表 'v' 中的每次贷记借记计算的查询,obal 被多次添加并显示在欧宝。当查询修改如下:
SELECT vn.type, vn.obal + SUM(IIF(v.date < sd, v.credit-v.debit, 0)) OpBal, ;
SUM(IIF(BETWEEN(v.date, sd, ed), v.credit-v.debit, 0)) CurBal ;
FROM v, vn WHERE v.name = vn.name GROUP BY vn.type ;
ORDER BY vn.type HAVING OpBal + CurBal != 0

它显示一条错误消息,如“Group by 子句丢失或无效”!

RDBMS 使用 MS Visual Foxpro 9。sd 和 ed 是用于查询的日期类型变量,其中 sd < ed。

请帮助我获得预期的结果。非常感谢。

最佳答案

几分钟前,我第一次看到了带有 VFP 的 SQL 的 SQL 语法,所以这很可能充满了错误,但作为一种“猜测”:

SELECT vn.type, 
SUM(vn.obal + (SELECT SUM(IIF(v.date < sd, v.credit-v.debit, 0))
FROM v
WHERE v.name = vn.name)) OpBal,
SUM(SELECT SUM(IIF(BETWEEN(v.date, sd, ed), v.credit-v.debit, 0))
FROM v
WHERE v.name = vn.name) CurBal
FROM vn
GROUP BY vn.type
ORDER BY vn.type
HAVING OpBal + CurBal != 0

基本上,我刚刚将选择从 v 转换为子选择,以避免重复 vn.obal。对于 v 来说,在将它们加在一起之前首先获得单个人的总和应该无关紧要。

关于SQL查询选择具有非聚合值和聚合函数表达式的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11372901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com