标题:这样的表能够通过select语句实现吗
只看楼主
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:396
帖 子:11713
专家分:43267
注 册:2006-5-13
结帖率:99.55%
已结贴  问题点数:100 回复次数:18 
这样的表能够通过select语句实现吗
源表1
日期     凭证编号  借方金额   贷方金额  部门编号
2009-9-2     1      1500            0      1
2009-9-2     2      1800            0      3
2009-9-12    3        0           500      2
2009-9-15    4      1200            0      2


源表2
部门编号   部门名称
1          行政部
2          财务部
3          储运部
4          销售部
5          采购部


目标表
日期     凭证编号  借方金额   贷方金额    余额     行政部    财务部     储运部    销售部     采购部
2009-9-2    1        1500          0      1500      1500
2009-9-2    2        1800          0      3300                           1800
2009-9-12   3                    500      2800                -500
2009-9-15   4        1200          0      4000                1200

如果源表2的记录数是固定的可能还好处理,如果源表2的记录是可以由用户随时添加的又该如何处理?

搜索更多相关主题的帖子: 语句 select 
2009-11-15 16:57
外部三电铃
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:那一年
等 级:贵宾
威 望:55
帖 子:2004
专家分:7306
注 册:2007-12-17
得分:20 
不知道VFP支不支持左外连接,如果用mysql可以这样
select 源表1 LEFT JOIN 源表2 ON 源表1.部门编号=源表2.部门编号

关于左外连接的定义:
LEFT JOIN 或 LEFT OUTER JOIN。
左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。

那一年,苍井空还是处女
2009-11-15 18:48
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:396
帖 子:11713
专家分:43267
注 册:2006-5-13
得分:0 
首先要感谢楼上的解答!
我在VFP下测试,语句如下:
select * from 源表1 LEFT JOIN 源表2 ON 源表1.部门编号=源表2.部门编号
得到的结果如下:
日期     凭证编号  部门编号_a  借方金额   贷方金额   部门编号_b    部门名称
2009-9-2    1        1          1500          0         1           行政部
2009-9-2    2        3          1800          0         3           储运部
2009-9-12   3        2                       500        2           财务部
2009-9-15   4        2          1200          0         2           财务部

没有达到我需要的结果。

我现在采用笨办法,建立一个自由表,然后通过编程计算出相应的数据并添加到表中。

活到老,学到老! http://www. E-mail:hu-jj@
2009-11-16 16:04
nhygm888
Rank: 2
等 级:论坛游民
威 望:1
帖 子:186
专家分:42
注 册:2008-7-20
得分:5 
如果 源表2记录不是 固定的 先用程序 算出有几个部门
生成几个 iif(部门编号=1,借方金额-贷方金额,0) as 行政部 这样的条件
在用 借方金额-贷方金额 as 余额,iif(部门编号=1,借方金额-贷方金额,0) as 行政部,..  能行不。。。我是新手 你自己试吧  呵呵

[ 本帖最后由 nhygm888 于 2009-11-17 07:54 编辑 ]
2009-11-17 07:44
baichuan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:37
帖 子:953
专家分:589
注 册:2006-3-13
得分:5 
这个胡九九啊!

这也能实现?可能么?等于是把表内容添加到表项中去!

2009-11-17 12:02
hgfeng1984
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:139
专家分:513
注 册:2006-3-26
得分:60 
CLOSE ALL
CLEAR

USE TBL1 IN 0
USE TBL2 IN 1

SQL_STR=''
CSTR=''

SELECT A.*,B.BMMC FROM TBL1 A LEFT JOIN TBL2 B ON A.BMBH=B.BMBH INTO CURSOR CUR_TMP

SQL_STR=[SELECT RQ,PZBH,JFJE,DFJE,BMBH]

SELECT [,IIF(BMMC=']+BMMC+[',JFJE-DFJE,00000)]+[ ]+BMMC AS STR_C FROM TBL2 INTO CURSOR TMP

FOR I = 1 TO RECCOUNT()
    GO I
    CSTR=CSTR+ALLTRIM(STR_C)
ENDFOR
*?CSTR

SQL_STR=SQL_STR+CSTR+' FROM CUR_TMP M'
*?SQL_STR
EXECSCRIPT(SQL_STR)


参考了SQL的竖转横思路.
可以运行试一下这段代码,表名换一下.

vfp里好像不支持
SELECT SQL_STR=SQL_STR+'IIF()....' FROM TABL2 这样的赋值(VFP里作为等式来考虑了,SQL里可以),所以只能再次用循环来连接字段.

表二可以随客户增加.结果自动增加一列.
2009-11-17 12:36
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:396
帖 子:11713
专家分:43267
注 册:2006-5-13
得分:0 
以下是引用baichuan在2009-11-17 12:02:17的发言:

这个胡九九啊!

这也能实现?可能么?等于是把表内容添加到表项中去!
要实现起来是有难度。由于我对selec语句不熟悉,我看到很多使用select语句解决复杂问题的实例,以前需要用一大堆代码解决的问题,很多只要一条select语句就实现了,所以我才将这个问题提出来,集思广益,看有没有解决的途径。
我用代码解决的过程是:先建立一个结构表,将所需要的项目添加到这个表中,然后用这个表来建立一个目标表,再将数据分别“装”入目标表中,最后再逐行计算出余额。我的这个方法是最原始的,肯定有可以改进的地方。

活到老,学到老! http://www. E-mail:hu-jj@
2009-11-18 08:09
hgfeng1984
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:139
专家分:513
注 册:2006-3-26
得分:0 
..

[ 本帖最后由 hgfeng1984 于 2012-3-13 16:38 编辑 ]
2009-11-18 10:49
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:396
帖 子:11713
专家分:43267
注 册:2006-5-13
得分:0 
感谢楼上的热心!因为这几天比较忙,您的代码我还在分析,尚未进行测试,请稍候!

活到老,学到老! http://www. E-mail:hu-jj@
2009-11-18 11:45
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:396
帖 子:11713
专家分:43267
注 册:2006-5-13
得分:0 
经过测试,6楼的代码基本上可以达到要求,尽管还缺“余额”列,但已经很不容易了。测试的结果如下:

日期     凭证编号  借方金额   贷方金额   部门编号    行政部    储运部     财务部
2009-9-2    1       1500          0         1         1500
2009-9-2    2       1800          0         3                   1800
2009-9-12   3                    500        2                              -500
2009-9-15   4       1200          0         2                              1200

说来也很惭愧,我还没有弄明白6楼的代码,还在继续分析、学习中。

活到老,学到老! http://www. E-mail:hu-jj@
2009-11-18 16:55



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-292391-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020499 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved