You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Current »

[ |../../index.htm#lansa/select_e.htm]
現在地:

7.107.3 SELECT の使用例

例1:明細行ファイル内の、受注番号がフィールド#ODRNUMの値と一致しているすべてのレコードからフィールド#ORDLIN、#PRODUCT、#QUANTITY、および#PRICEを選択して印刷します。
SELECT    FIELDS(#ORDLIN #PRODUCT #QUANTITY #PRICE) FROM_FILE(ORDLIN) WITH_KEY(#ORDNUM) UPRINT    FIELDS(#ORDLIN #PRODUCT #QUANTITY #PRICE) ENDSELECT  
または、以下のように指定しても同じ結果になります。
GROUP_BY  NAME(#ORDERLINE) FIELDS(#ORDLIN #PRODUCT #QUANTITY #PRICE)   SELECT    FIELDS(#ORDERLINE) FROM_FILE(ORDLIN) WITH_KEY(#ORDNUM) UPRINT    FIELDS(#ORDERLINE) ENDSELECT  
例2:明細行ファイル内の、#QUANTITY値が10より大きいか#PRICE値が49.99未満のすべてのレコードからフィールド#ORDLIN、#PRODUCT、#QUANTITY、および#PRICEフィールドを選択して印刷します。
SELECT    FIELDS(#ORDLIN #PRODUCT #QUANTITY #PRICE) FROM_FILE(ORDLIN) WHERE('(#QUANTITY *GT 10) *OR (#PRICE *LT 49.99)') UPRINT    FIELDS(#ORDLIN #PRODUCT #QUANTITY #PRICE) ENDSELECT  
または、以下のように指定しても同じ結果になります。
GROUP_BY  NAME(#ORDERLINE) FIELDS(#ORDLIN #PRODUCT #QUANTITY #PRICE)   SELECT    FIELDS(#ORDERLINE) FROM_FILE(ORDLIN) WHERE('(#QUANTITY *GT 10) *OR (#PRICE *LT 49.99)') UPRINT    FIELDS(#ORDERLINE) ENDSELECT  
例3:以下のフィールドとデータで構成されるACCOUNTというファイルがあるとします。

会社(#COMP)

部門(#DIV)

課(#DEPT)

支出(#EXPEND)

収入(#REVNU)

01

1

ADM

400

576

"

"

MKT

678

56

"

"

SAL

123

6784

 

 

 

 

 

"

2

ADM

46

52

"

"

SAL

978

456

 

 

 

 

 

"

3

ACC

456

678

"

"

SAL

123

679

 

 

 

 

 

02

1

ACC

843

400

"

"

MKT

23

 

"

"

SAL

876

10

 

 

 

 

 

"

2

ACC

 

43

 
また、このファイルではキーとして#COMP、#DIV、および#DEPTが設定されています。SELECTコマンドのNBR_KEYSパラメータを使用して、非常に柔軟なブラウズ・ファンクションを作成します。
DEF_LIST   NAME(#ACCOUNTS)  FIELDS(#COMP #DIV #DEPT #EXPEND #REVNU) DEFINE     FIELD(#NBRKEYS) TYPE(*DEC) LENGTH(1) DECIMALS(0)   BEGIN_LOOP   CHANGE     (#COMP #DIV #DEPT) *NULL REQUEST    FIELDS(#COMP #DIV #DEPT)   IF_NULL    FIELD(#COMP #DIV #DEPT) CHANGE     #NBRKEYS 0 ELSE IF_NULL    FIELD(#DIV #DEPT) CHANGE     #NBRKEYS 1 ELSE IF_NULL    FIELD(#DEPT) CHANGE     #NBRKEYS 2 ELSE CHANGE     #NBRKEYS 3 ENDIF ENDIF ENDIF CLR_LIST   NAMED(#ACCOUNTS) SELECT     FIELDS(#ACCOUNTS) FROM_FILE(ACCOUNT) WITH_KEY(#COMP #DIV #DEPT) NBR_KEYS(#NBRKEYS) ADD_ENTRY  TO_LIST(#ACCOUNTS) ENDSELECT   DISPLAY    BROWSELIST(#ACCOUNTS)   END_LOOP  
ユーザーがREQUESTコマンドで値を何も入力しない場合、SELECTコマンド実行時の#NBRKEYSの値は0になるため、実質的には、以下のようなSELECTコマンドが実行されることになります。
SELECT     FIELDS(#ACCOUNTS) FROM_FILE(ACCOUNT)  
この場合、ファイル内のすべてのレコードが表示されます。
ユーザーがREQUESTコマンドで#COMPの値を入力した場合、SELECTコマンド実行時の#NBRKEYSの値は1になり、実質的には、以下のようなSELECTコマンドが実行されることになります。
SELECT  FIELDS(#ACCOUNTS) FROM_FILE(ACCOUNT) WITH_KEY(#COMP)  
この場合、ファイル内の、要求された会社番号を持つすべてのレコードが表示されます。
ユーザーがREQUESTコマンドで#COMPの値と#DIVの値を入力した場合、SELECTコマンド実行時の#NBRKEYSの値は2になり、実質的には、以下のようなSELECTコマンドが実行されることになります。
SELECT  FIELDS(#ACCOUNTS) FROM_FILE(ACCOUNT) WITH_KEY(#COMP #DIV)  
この場合、ファイル内の、要求された会社番号と部門番号を持つすべてのレコードが表示されます。
ユーザーがREQUESTコマンドで#COMPの値、#DIVの値、および#DEPTの値を入力した場合、SELECTコマンド実行時の#NBRKEYSの値は3になり、実質的には、以下のようなSELECTコマンドが実行されることになります。
SELECT   FIELDS(#ACCOUNTS) FROM_FILE(ACCOUNT) WITH_KEY(#COMP #DIV #DEPT)  
この場合、ファイル内の、要求された会社番号、部門番号、および課番号を持つすべてのレコードが表示されます。このとき、指定されたデータに対して表示されるレコードは1つのみです。
例4:NBR_KEYS(*COMPUTE)パラメータを使用して、例3と機能的に同じソリューションを作成します。
DEF_LIST   NAME(#ACCOUNTS)  FIELDS(#COMP #DIV #DEPT #EXPEND #REVNU)   BEGIN_LOOP CHANGE     (#COMP #DIV #DEPT) *NULL REQUEST    FIELDS(#COMP #DIV #DEPT) CLR_LIST   NAMED(#ACCOUNTS) SELECT     FIELDS(#ACCOUNTS) FROM_FILE(ACCOUNT) WITH_KEY(#COMP #DIV #DEPT) NBR_KEYS(*COMPUTE) ADD_ENTRY  TO_LIST(#ACCOUNTS) ENDSELECT DISPLAY    BROWSELIST(#ACCOUNTS) END_LOOP  
例5:明細行ファイル内の、受注番号がフィールド#ODRNUMの値と一致しているすべてのレコードからフィールド#ORDLIN、#PRODUCT、#QUANTITY、および#PRICEを選択して印刷します。情報を逆の順序で(すなわち、行番号が大きいものから)印刷します。
GROUP_BY  NAME(#ORDERLINE) FIELDS(#ORDLIN #PRODUCT #QUANTITY #PRICE)   SELECT    FIELDS(#ORDERLINE) FROM_FILE(ORDLIN)  WITH_KEY(#ORDNUM) OPTIONS(*BACKWARDS) UPRINT    FIELDS(#ORDERLINE) ENDSELECT  
例6:例5とまったく同じロジックを使用し、印刷される行を3行までにします。
GROUP_BY  NAME(#ORDERLINE) FIELDS(#ORDLIN #PRODUCT #QUANTITY #PRICE)   CHANGE    FIELD(#COUNTER) TO(0) SELECT    FIELDS(#ORDERLINE) FROM_FILE(ORDLIN) WITH_KEY(#ORDNUM) WHERE('#COUNTER *LT 3') OPTIONS(*BACKWARDS *ENDWHERE) UPRINT    FIELDS(#ORDERLINE) CHANGE    FIELD(#COUNTER) TO('#COUNTER + 1') ENDSELECT  
例7:顧客名を入力するようユーザーに要求します。次に、名前/住所ファイルから、指定された名前に「最も近い」ものから10個の名前を選択し、その詳細を表示します。
DEF_LIST  NAME(#CUSTOMER) FIELDS(#NAME #CUSTNO #ADDR1 #POSTCODE) COUNTER(#NUMCUSTS)   REQUEST   FIELDS(#NAME) CLR_LIST  NAMED(#CUSTOMER) SELECT    FIELDS(#CUSTOMER) FROM_FILE(NAMES) WITH_KEY(#NAME) WHERE('#NUMCUSTS *LT 10') OPTIONS(*STARTKEY *ENDWHERE) ADD_ENTRY TO_LIST(#CUSTOMER) ENDSELECT DISPLAY   BROWSELIST(#CUSTOMER)  
例8:現在アクティブなバージョンのファイルORDLINからすべてのフィールドを選択し、このファイルのすべてのフィールドについてさまざまな計算を実行し、選択された各レコードの結果を印刷します。
SELECT    FIELDS(*ALL) FROM_FILE(ORDLIN) WITH_KEY(#ORDNUM)     ....... ....... .......   UPRINT    FIELDS(#RESULT1 #RESULT2 #RESULT3)                   
[ |../../index.htm#lansa/select_e.htm]

  • No labels