【发布时间】:2012-01-16 21:38:50
【问题描述】:
我有两张桌子:
-
t1(date d, name c(20), debit n(7), credit n(7)) -
t2(date d, name c(20), type c(25), obal n(7))
这是示例数据。
T1:
DATE NAME DEBIT CREDIT
01.01.12 dad 5000
01.01.12 mum 6000
05.01.12 school 1000
01.02.12 dad 5000
01.02.12 mum 6000
10.02.12 tuition 300
10.02.12 snacks 100
01.03.12 dad 5000
01.03.12 mum 6000
01.03.12 books 500
02.03.12 rice 500
02.03.12 vegetables 900
03.03.12 snacks 100
01.04.12 dad 5000
01.04.12 mum 6000
01.04.12 meat 200
21.04.12 guest 800
T2:
DATE NAME TYPE OBAL
01.01.12 dr fee medical 8000
01.01.12 medicine medical -10000
01.01.12 dad income 400000
01.01.12 mum income 450000
05.01.12 school education 0
10.02.12 tuition education 0
10.02.12 snacks misc 0
01.03.12 books education 0
02.03.12 rice food 0
02.03.12 vegetables food 0
01.04.12 meat food 0
21.04.12 guest misc 0
预计按类型 (t2) 分组的每个名称的 (obal + credit - debit) 总和。使用的查询和获得的输出是:
SELECT
t2.type, obal + SUM(NVL(credit - debit, 0)) as bal
FROM t2
LEFT JOIN t1 ON t2.name = t1.name
GROUP BY
t2.type, t2.obal
结果:
TYPE BAL
education -1800
food -1600
income 420000
income 474000
medical -10000
medical 8000
misc -1000
我的问题是:尽管使用了 GROUP BY 子句,为什么 type income 和 medical 在查询输出中出现两次?我尝试在 t2.type 列之前添加 DISTINCT 子句,这也产生了相同的输出!我可以观察到的一件事是 type medical 表 t2 中的两条记录在 t1 中没有匹配相同 的记录name 和 type 的两条记录 income 在 t2 中有一个非零 obal。请帮我解决这个问题。
【问题讨论】:
-
抱歉没有提及数据库信息。我在 Windows 7 上使用 Microsoft Visual Foxpro 9.0。
标签: sql group-by visual-foxpro