【问题标题】:How to find missing records in foxpro table?如何在foxpro表中查找丢失的记录?
【发布时间】:2026-01-08 05:25:04
【问题描述】:

我有一张如下表。

cAcctNumber nSerialNo cBatchNo
12345 120 456
12345 122 456
12345 123 456
12345 125 456
12345 100 500
12345 105 500
12345 106 500
12345 108 500

现在我想要这样的输出,

nSerialNo
121
124
101
102
103
104
107

我做了这样的事情,

Select cAcctNumber, cBatchNo, nSerialNo , ;
   Min(nSerialNo) as minCN,;
   Max(nSerialNo) as maxCN,; 
   Count(*) as BatchCount; 
   From Cheque_no Group By cAcctNumber, cBatchNo, nSerialNo ;
   Into Cursor Batches  READWRITE 


Select Batches 
Go Top
nMin = minCN
Go Bottom
nMax = maxCN
nMaxRecno = Recno()


Create Cursor MissingChequeno  (nSerialNo I)

For I = nMin+1 To nMax-1
   Try
      Insert Into Batches Values (I)
      
      Insert Into MissingChequeno  Values (I)
   Catch 
   Endtry
ENDFOR 

需要根据每个 cBatchNo 获取我丢失的记录。这意味着 Batch 456 缺少 ** nSerialNo 121,nSerialNo 124** 和 Batch 456 缺少 nSerialNo 101,nSerialNo 102,nSerialNo 103,nSerialNo 104,nSerialNo 107。 我怎样才能得到我的输出? 谢谢

【问题讨论】:

    标签: visual-foxpro


    【解决方案1】:

    有 N 种方法可以做到这一点。其中之一是:

    Create Cursor Cheque_no ;
        (cAcctNumber i,nSerialNo i,cBatchNo i)
    Insert Into Cheque_no Values(12345,120,456)
    Insert Into Cheque_no Values(12345,122,456)
    Insert Into Cheque_no Values(12345,123,456)
    Insert Into Cheque_no Values(12345,125,456)
    Insert Into Cheque_no Values(12345,100,500)
    Insert Into Cheque_no Values(12345,105,500)
    Insert Into Cheque_no Values(12345,106,500)
    Insert Into Cheque_no Values(12345,108,500)
    
    
    
    
    Local Array laNums[1]
    Select Min(nSerialNo), Max(nSerialNo) From Cheque_no Into Array laNums
    Local ix
    Create Cursor allNums(num i)
    For ix = laNums[1] To laNums[2]
        Insert Into allNums Values (m.ix)
    Endfor
    
    Select N.num As nSerialNo ;
        From allNums N ;
        where Not Exists (Select * From myTable T Where T.nSerialNo = N.num) ;
        into Cursor MissingChequeno nofilter
    
    Browse
    

    【讨论】:

    • 这里我需要把nSerialNo改成cPaymentNumber。当我使用上面的代码不是数字表达式时。我该如何解决这个问题?
    • 您必须使用数字表达式。我不知道你的意思,也不知道你的代码。
    • 我不能为此使用字符串吗?
    • 字符串是干什么用的?
    • 我需要将 nSerialNo 修改为 cPaymentNumber。这里 cPaymentNumber 是一个字符字段。
    最近更新 更多