标题:SQL宏替换求教
只看楼主
dragonman19
Rank: 1
等 级:新手上路
帖 子:68
专家分:5
注 册:2014-2-20
结帖率:42.11%
已结贴  问题点数:20 回复次数:6 
SQL宏替换求教
现在有两个表,A.   B
表A:       序号       车间       部门              人员      
              1              1车间    事业1部      张三
              2              2车间     事业二部    李四

表B.     序号       文凭        张三  李四
                  1      大学          1

                2        大专                    1
我的想法是通过车间和部门,得到  具体人员名称: select 人员  from A  where 车间=  and 部门=
然后用宏替换得到他的具体文凭:  select   文凭  from B where  &人员=1
但是为什么得到的是空值?
搜索更多相关主题的帖子: where 大学 大专 事业 文凭 
2014-03-13 13:26
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
得分:4 
不用宏替换:  select   文凭  from B where  人员 in (select 人员  from A  where 车间=  and 部门=)
2014-03-13 13:31
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:4 
贴出最后要求得到的结果

坚守VFP最后的阵地
2014-03-13 13:52
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
以下是引用dragonman19在2014-3-13 13:26:08的发言:

现在有两个表,A.   B
表A:       序号       车间       部门              人员        
              1              1车间    事业1部      张三
              2              2车间     事业二部    李四
 
表B.     序号       文凭        张三  李四
                  1      大学          1
 
                2        大专                    1
我的想法是通过车间和部门,得到  具体人员名称: select 人员  from A  where 车间=  and 部门=
然后用宏替换得到他的具体文凭:  select   文凭  from B where  &人员=1
但是为什么得到的是空值?
表B的结构设置不合理,应该设置成如下格式
人员 大学 大专 中专

坚守VFP最后的阵地
2014-03-13 13:57
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:649
专家分:2156
注 册:2014-2-7
得分:4 
楼主的代码有两个问题:一个是应该将查询得到的人员名称放到一个内存变量中,另一个是宏替换只能针对字符型内存变量,而“&人员”显示是对表字段的引用。

方法1:
select 0
use a
locate for 车间='车间1' and 部门='事业1部'
if found()
    cUser = 人员
    select 文凭 from b where &cUser = 1
endif

方法2:
select 人员 from A  where 车间='车间1'  and 部门= '事业1部' into array aRet
if _tally > 0
    select 文凭 from b where &aRet[1,1] = 1
endif

泉城飞狐
2014-03-13 14:13
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
得分:4 
以下是引用dragonman19在2014-3-13 13:26:08的发言:

现在有两个表,A.   B
表A:       序号       车间       部门              人员        
              1              1车间    事业1部      张三
              2              2车间     事业二部    李四
 
表B.     序号       文凭        张三  李四
                  1      大学          1
 
                2        大专                    1
我的想法是通过车间和部门,得到  具体人员名称: select 人员  from A  where 车间=  and 部门=
然后用宏替换得到他的具体文凭:  select   文凭  from B where  &人员=1
但是为什么得到的是空值?

你的表B设计有问题:“张三”、“李四”等人名应该作为字段值,而不是字段名。表B应该设计成:序号,车间,人员,文凭,然后你的问题就会迎刃而解:SELECT B.人员,文凭 FROM A,B WHERE A.人员=B.人员。
但这种设计方法也是有缺陷的,如果碰到人员有重名的情况,那么就可能发生错误的连接。改进的办法是:表B也加一个车间代码,然后上述语句中的WHERE子句可以改为:A.车间+A.人员=B.车间+B.人员,不过这也不是最好的办法,可能同一车间也会有重名人员。最好的办法就是建立员工工号,因为工号在同一单位是唯一的,表A、B都设工号字段,然后用工号进行关联。上述语句中的WHERE子句可以变成“A.工号=B.工号”。
不知道我的表述你是否看懂。
2014-03-13 15:38
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:396
帖 子:11713
专家分:43267
注 册:2006-5-13
得分:4 
应该用身份证号码作人员的关键字段,出现重复的可能性几乎为零。

活到老,学到老! http://www. E-mail:hu-jj@
2014-03-13 16:38



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




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

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