PB的data window的SQL问题, 如何才可以选择一个栏位两次?
SELECT LCAAPRC.CLMNUM, <BR> LCAAPRC.SUBMITDTE, <BR> LCAAPRC.SURNAME, <BR> LCAAPRC.ASSESSOR, <BR> (select LCALPF.PNDATE from LCALPF where <BR> LCALPF.PNCODE like 'I%'),<BR> (select LCALPF.PNDATE from LCALPF where <BR> LCALPF.PNCODE like 'Q%'), <BR> (select LCALPF.reslvdte from LCALPF where<BR> LCALPF.reslvcde <> '')<BR> FROM LCAAPRC,LCALPF<BR><BR>从这个SQL里面大家可以看到我一共提取了LCALPF.PNDATE这条数据两次, 不过是根据两条不同的where条件语句. 我的目的是提取PNDATE这个字段分别在LCALPF.PNCODE的开头字母是I 和 Q的时候, 如果按照我现在的SQL会出现我提取了多余一条数据的警告, 导致数据提取失败, 请问各位高人, 要如何才可以做得到呢??<BR><BR>谢谢[em01][em01]回复:(yihuizeng)PB的data window的SQL问题, 如何才...
SELECT A.SEQ,B.SEQ<BR> FROM (SELECT TOPIC,SEQ FROM HELP WHERE SEQ LIKE '1%') A,<BR> (SELECT TOPIC,SEQ FROM HELP WHERE SEQ LIKE '2%') B<BR> WHERE A.TOPIC = B.TOPIC ;<BR>顯示兩個欄位。topic是主健。<BR>你那裡都沒有where條件<BR> 有一个问题, 我试过照你的sql来改我的语句, 不过<BR><BR>FROM (SELECT TOPIC,SEQ FROM HELP WHERE SEQ LIKE '1%') A,<BR> (SELECT TOPIC,SEQ FROM HELP WHERE SEQ LIKE '2%') B<BR> WHERE A.TOPIC = B.TOPIC ;<BR><BR>这一段, 在我的语句中, 例如, 我只需要选择SEQ而不需要选择Topic的, 所以我把他改变成: FROM (SELECT SEQ FROM HELP WHERE SEQ LIKE '1%') A,<BR> (SELECT SEQ FROM HELP WHERE SEQ LIKE '2%') B<BR> WHERE A.TOPIC = B.TOPIC ;<BR>这样子就会显示说 topic not in table A in *N.<BR>请问这样的情况要怎么解决? 谢谢<BR><BR> 裡面的TOPIC就是關聯用的呀當然是要的<BR>(SELECT SEQ FROM HELP WHERE SEQ LIKE '2%') B<BR>把TOPIC加進去就好啦,<BR>打個比方:<BR>我不知道LCAAPRC,LCALPF之間的關系,我現在假設欄位SUBMITDTE是兩個表的主健,以這個欄位相聯<BR>就可以這個寫:<BR><BR>SELECT LCAAPRC.CLMNUM, <BR> LCAAPRC.SUBMITDTE, <BR> LCAAPRC.SURNAME, <BR> LCAAPRC.ASSESSOR, <BR> A.PNDATE,<BR> B.PNDATE,<BR> LCALPF.reslvdte <BR> FROM LCAAPRC,LCALPF,<BR> (select SUBMITDTE,PNDATE from LCALPF where <BR> LCALPF.PNCODE like 'I%') A,<BR> (select SUBMITDTE,PNDATE from LCALPF where <BR> LCALPF.PNCODE like 'Q%') B <BR>WHERE LCAAPRC.SUBMITDTE = A.SUBMITDTE AND<BR> LCAAPRC.SUBMITDTE = B.SUBMITDTE AND<BR> LCAAPRC.SUBMITDTE = LCALPF.SUBMITDTE AND<BR> LCALPF.reslvcde <> ''<BR><BR><BR> LCALPF里面有三个主键, 分别是CLMNUM, CHDRNUM, PNCODE, 那需要把这三个都加进去吗? 那这个SQL语句不是变得非常庞大了吗?? 谢谢 <P>楼主写法不正确<BR>因为你SELECT每条记录却单个字段却是个多记录的集合<BR>我不清楚楼主想要取什么数据。</P> 不好意思,可能写得太混乱了吧, 我再说明一下, 我是想从LCALPF中提取一个叫PNDATE(照会日期)的字段. 不过我想通过两种不同的过滤条件来提取, 一个是当PNCODE(照会代码)的开头第一个字母是等于I时提取的PNDATE. 另外一个是当PNCODE(照会代码)的开头第一个字母是等于Q时提取的PNDATE. LCALPF这个table一共有三个primary key, 分别是, chdrnum, clmnum和pncode, 按照这个思路的sql应该怎么写呢? 谢谢 <P>你可以按照上面的方法自已試一下嗎?看一下數據拉出是不是對的。<BR></P> 我是想按照来做, 不过照你的方法, LCALPF里面有三个主键呢, 我需要除了PNDATE其他三个主键都全部要选择的话, 我的SQL语句会变得非常大, 这样提取数据的速度会降低而且我怕PB也跑不起太复杂的语句<br><br>谢谢<br> select pndate from table where pncode like 'i%' or pncode like 'q%' 我觉得斑竹可能有点误会, 我再次澄清一下。 首先我需要两个栏位: 会签日期和调查日期。 这两个栏位是都需要在data window上显示出来的。 分别是两个不同的栏位来的。会签是选择PNDATE当pncode是开头是i的数据,调查是选择PNDATE当pncode是开头是q的数据。 按照您的做法, 似乎只是一个拦位按照不同的条件选择不同的数据, 也就是一个pndate栏位,他可以有pncode like %i 或者 pncode like q%两条过滤条件. 这跟我的要求有些不同吧<br> <P>你是一个表还是两个表<BR>你可以列出主要表的主要字段及相关数据,达到目的的数据显示参考。<BR></P> 好的好的, 这个表其实是提取不同类型照会的日期的表格. 是一个表里面有这四个栏位,分别是:<BR><BR><BR>号码(num) 签核日期(qdate) 调查日期(cdate) 核销日期(sdate)<BR><BR>qdate其实是后台 'LCALPF' 表中里的pndate(照会日期)在pncode(照会码)等于I****的时候, 这样的照会被定义成送签核照会, 所以这个时候的pndate(照会日期)就是被定义为签核日期了<BR><BR>cdate则是后台里的'LCALPF'表中的pndate(照会日期)在pncode(照会码)等于Q****的时候,这样的照会就被定义为调查照会,所以这个时候的pndate(照会日期)就被定义为签核日期了<BR><BR>sdate则是后台里的'LCALPF'表中的reslvdte(解决日期)在reslvcode(解决码)不为空值的时候, 这样代表这条照会已经有了解决方法了, 这时候reslvdte就可以并定义为核销日期了.<BR><BR>他们都是在同一个表LCALPF中提取的, 麻烦的是qdate和cdate, select的都是pndate.我不知道怎么做才行??<BR><BR><BR> <P>那么LCALPF表的结构呢?<BR></P> 假设一个NUM记录它在LCALPF表中的记录是什么样?<BR>它在LCALPF表中是不是一条记录还是多条记录<BR>这些都没有交待的?<BR> <P>再问一下,如果一条NUM在LCALPF表中是多条记录,那么是不是当PCODE为I字头时的记录只有一条还是多条,如果是多条应该取哪条,同样的就是当为Q字头时又是如何</P> <P>您的意思是以上那些字段在LCALPF的数据结构吗? <BR><BR>pncode: char(5), 例子Q20035或者 I1000<BR>num: char(9), 例子:700000769<BR>pndate: decimal(0), 例子:20070206<BR>reslvcode: char(5) 例子:R2111<BR>reslvdte: decimal(0), 例子:20070312<BR><BR>请问这些资料是不是你需要的?</P> 这些是需要的,还有就是70000769 在PNCODE的字头为Q时是只会有一条记录还是会有多条<BR>如按上表记录会不会是这样<BR>q20035 70000769 20070206 R2111 20070312<BR>i1000 70000769 20070306 R2111 20070312<BR><BR>还是70000769 只会有一条记录,只是PNCODE的值可能是Q字头也可能是I字头<BR><BR> 楼主可以罗列一些数据出来 <DIV class=quote><B>以下是引用<U>notbig</U>在2007-3-28 8:26:38的发言:</B><BR>这些是需要的,还有就是70000769 在PNCODE的字头为Q时是只会有一条记录还是会有多条<BR>如按上表记录会不会是这样<BR>q20035 70000769 20070206 R2111 20070312<BR>i1000 70000769 20070306 R2111 20070312<BR><BR>还是70000769 只会有一条记录,只是PNCODE的值可能是Q字头也可能是I字头<BR><BR></DIV><P>
<P><BR><BR>其实我说漏了点东西, 需要查找的分别是‘最小送签核照会日期’和‘最小调查照会日期’<BR>也就是照会码(pncode)开头为Q或者I所相对应的最小的照会日期(pndate)<BR>以及最大解决日期(rslvdate)</P>
<P>用7000769去查询pncode开头为Q后者I的PNDATE的时候会出现多条记录,因为对应这个号码可能<BR>出现多条照会, 同样每条照会都需要一个解决码才确定这条照会已经解决, 如果解决码是空则<BR>代表并无解决。解决码,解决日期并不影响会签和调查日期</P>
<P> <BR>例如会出现以下的情况</P>
<P>PNCODE NUM PNDATE Rslvcode Rslvdate</P>
<P>q200035 70000769 20060203 T10000 20071120 <BR>q100000 70000769 20070103 T20000 20050303<BR>i501230 70000769 20070505 <BR>i102123 70000769 20070101 T51431 20060805<BR>q938100 70000769 20051022 T32123 20080909</P>
<P>从这个照会提取出来的数据可以看得到, 用70000769可以查出三条Q开头的pncode和两条I开头的pncode<BR>他们分别对应的是不同的日期, 而rslvcode和rslvdate就只有一条<BR>意思是在日期20060203 这个号码70000769有一条送签核的照会<BR> 在日期20060103 这个号码70000769有一条送签核的照会<BR> 在日期20051022 这个号码70000769有一条送签核的照会</P>
<P> 在日期20070103 这个号码70000769有一条调查的照会<BR> 在日期20070101 这个号码70000769有一条调查的照会</P>
<P> q200035这条签核照会在20071120这个时间以T10000的解决方式解决了<BR> q100000这条签核照会在20050303这个时间以T20000的解决方式解决了<BR> q938100这条签核照会在20080909这个时间以T32123的解决方式解决了<BR> i501230这条调查照会并没有响应的解决码,解决日期也为空,代表为解决(当解决码为空值,解决日期必然也为空)<BR> i102123这条调查照会在20060805这个时间以T51431的解决方式解决了<BR> </P>
<P>我的SQL的目的是可以分别提取出三个栏位:最小的签核照会日期, 最小的调查照会日期和最大解决日期<BR>也就是带出<BR> QHDATE DCDATE JJDATE<BR>20050303(最小签核日期), 200060805(最小调查日期)和 20080808(最大解决日期)</P>
页:
[1]
2
