| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4323 人关注过本帖
标题:PB的data window的SQL问题, 如何才可以选择一个栏位两次?
取消只看楼主 加入收藏
yihuizeng
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2006-11-26
收藏
 问题点数:0 回复次数:8 
PB的data window的SQL问题, 如何才可以选择一个栏位两次?
SELECT LCAAPRC.CLMNUM,
LCAAPRC.SUBMITDTE,
LCAAPRC.SURNAME,
LCAAPRC.ASSESSOR,
(select LCALPF.PNDATE from LCALPF where
LCALPF.PNCODE like 'I%'),
(select LCALPF.PNDATE from LCALPF where
LCALPF.PNCODE like 'Q%'),
(select LCALPF.reslvdte from LCALPF where
LCALPF.reslvcde <> '')
FROM LCAAPRC,LCALPF

从这个SQL里面大家可以看到我一共提取了LCALPF.PNDATE这条数据两次, 不过是根据两条不同的where条件语句. 我的目的是提取PNDATE这个字段分别在LCALPF.PNCODE的开头字母是I 和 Q的时候, 如果按照我现在的SQL会出现我提取了多余一条数据的警告, 导致数据提取失败, 请问各位高人, 要如何才可以做得到呢??

谢谢
搜索更多相关主题的帖子: SQL data 栏位 window 选择 
2007-03-22 19:13
yihuizeng
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2006-11-26
收藏
得分:0 
有一个问题, 我试过照你的sql来改我的语句, 不过

FROM (SELECT TOPIC,SEQ FROM HELP WHERE SEQ LIKE '1%') A,
(SELECT TOPIC,SEQ FROM HELP WHERE SEQ LIKE '2%') B
WHERE A.TOPIC = B.TOPIC ;

这一段, 在我的语句中, 例如, 我只需要选择SEQ而不需要选择Topic的, 所以我把他改变成: FROM (SELECT SEQ FROM HELP WHERE SEQ LIKE '1%') A,
(SELECT SEQ FROM HELP WHERE SEQ LIKE '2%') B
WHERE A.TOPIC = B.TOPIC ;
这样子就会显示说 topic not in table A in *N.
请问这样的情况要怎么解决? 谢谢

2007-03-23 10:15
yihuizeng
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2006-11-26
收藏
得分:0 
LCALPF里面有三个主键, 分别是CLMNUM, CHDRNUM, PNCODE, 那需要把这三个都加进去吗? 那这个SQL语句不是变得非常庞大了吗?? 谢谢
2007-03-23 14:17
yihuizeng
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2006-11-26
收藏
得分:0 
不好意思,可能写得太混乱了吧, 我再说明一下, 我是想从LCALPF中提取一个叫PNDATE(照会日期)的字段. 不过我想通过两种不同的过滤条件来提取, 一个是当PNCODE(照会代码)的开头第一个字母是等于I时提取的PNDATE. 另外一个是当PNCODE(照会代码)的开头第一个字母是等于Q时提取的PNDATE. LCALPF这个table一共有三个primary key, 分别是, chdrnum, clmnum和pncode, 按照这个思路的sql应该怎么写呢? 谢谢
2007-03-23 15:10
yihuizeng
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2006-11-26
收藏
得分:0 
我是想按照来做, 不过照你的方法, LCALPF里面有三个主键呢, 我需要除了PNDATE其他三个主键都全部要选择的话, 我的SQL语句会变得非常大, 这样提取数据的速度会降低而且我怕PB也跑不起太复杂的语句

谢谢
2007-03-23 22:50
yihuizeng
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2006-11-26
收藏
得分:0 
我觉得斑竹可能有点误会, 我再次澄清一下。 首先我需要两个栏位: 会签日期和调查日期。 这两个栏位是都需要在data window上显示出来的。 分别是两个不同的栏位来的。会签是选择PNDATE当pncode是开头是i的数据,调查是选择PNDATE当pncode是开头是q的数据。 按照您的做法, 似乎只是一个拦位按照不同的条件选择不同的数据, 也就是一个pndate栏位,他可以有pncode like %i 或者 pncode like q%两条过滤条件. 这跟我的要求有些不同吧
2007-03-25 23:54
yihuizeng
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2006-11-26
收藏
得分:0 
好的好的, 这个表其实是提取不同类型照会的日期的表格. 是一个表里面有这四个栏位,分别是:


号码(num) 签核日期(qdate) 调查日期(cdate) 核销日期(sdate)

qdate其实是后台 'LCALPF' 表中里的pndate(照会日期)在pncode(照会码)等于I****的时候, 这样的照会被定义成送签核照会, 所以这个时候的pndate(照会日期)就是被定义为签核日期了

cdate则是后台里的'LCALPF'表中的pndate(照会日期)在pncode(照会码)等于Q****的时候,这样的照会就被定义为调查照会,所以这个时候的pndate(照会日期)就被定义为签核日期了

sdate则是后台里的'LCALPF'表中的reslvdte(解决日期)在reslvcode(解决码)不为空值的时候, 这样代表这条照会已经有了解决方法了, 这时候reslvdte就可以并定义为核销日期了.

他们都是在同一个表LCALPF中提取的, 麻烦的是qdate和cdate, select的都是pndate.我不知道怎么做才行??


2007-03-27 10:12
yihuizeng
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2006-11-26
收藏
得分:0 

您的意思是以上那些字段在LCALPF的数据结构吗? 

pncode: char(5), 例子Q20035或者 I1000
num: char(9),    例子:700000769
pndate: decimal(0), 例子:20070206
reslvcode: char(5) 例子:R2111
reslvdte: decimal(0), 例子:20070312

请问这些资料是不是你需要的?

2007-03-27 17:39
yihuizeng
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2006-11-26
收藏
得分:0 
以下是引用notbig在2007-3-28 8:26:38的发言:
这些是需要的,还有就是70000769 在PNCODE的字头为Q时是只会有一条记录还是会有多条
如按上表记录会不会是这样
q20035 70000769 20070206 R2111 20070312
i1000 70000769 20070306 R2111 20070312

还是70000769 只会有一条记录,只是PNCODE的值可能是Q字头也可能是I字头



其实我说漏了点东西, 需要查找的分别是‘最小送签核照会日期’和‘最小调查照会日期’
也就是照会码(pncode)开头为Q或者I所相对应的最小的照会日期(pndate)
以及最大解决日期(rslvdate)

用7000769去查询pncode开头为Q后者I的PNDATE的时候会出现多条记录,因为对应这个号码可能
出现多条照会, 同样每条照会都需要一个解决码才确定这条照会已经解决, 如果解决码是空则
代表并无解决。解决码,解决日期并不影响会签和调查日期


例如会出现以下的情况

PNCODE NUM PNDATE Rslvcode Rslvdate

q200035 70000769 20060203 T10000 20071120
q100000 70000769 20070103 T20000 20050303
i501230 70000769 20070505
i102123 70000769 20070101 T51431 20060805
q938100 70000769 20051022 T32123 20080909

从这个照会提取出来的数据可以看得到, 用70000769可以查出三条Q开头的pncode和两条I开头的pncode
他们分别对应的是不同的日期, 而rslvcode和rslvdate就只有一条
意思是在日期20060203 这个号码70000769有一条送签核的照会
在日期20060103 这个号码70000769有一条送签核的照会
在日期20051022 这个号码70000769有一条送签核的照会

在日期20070103 这个号码70000769有一条调查的照会
在日期20070101 这个号码70000769有一条调查的照会

q200035这条签核照会在20071120这个时间以T10000的解决方式解决了
q100000这条签核照会在20050303这个时间以T20000的解决方式解决了
q938100这条签核照会在20080909这个时间以T32123的解决方式解决了
i501230这条调查照会并没有响应的解决码,解决日期也为空,代表为解决(当解决码为空值,解决日期必然也为空)
i102123这条调查照会在20060805这个时间以T51431的解决方式解决了

我的SQL的目的是可以分别提取出三个栏位:最小的签核照会日期, 最小的调查照会日期和最大解决日期
也就是带出
QHDATE DCDATE JJDATE
20050303(最小签核日期), 200060805(最小调查日期)和 20080808(最大解决日期)

2007-03-28 16:39
快速回复:PB的data window的SQL问题, 如何才可以选择一个栏位两次?
数据加载中...
 
   



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

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