ROWDIFF(left, right [, COUNT] )
left | The left record, or a nested record structure. |
right | The right record, or a nested record structure. |
COUNT | Optional. Specifies returning a comma delimited set of zeros and ones (0,1) indicating which fields matched (0) and which did not (1). If omitted, a comma delimited set of the non-matching field names. |
Return: | ROWDIFF returns a single value. |
The ROWDIFF function is valid for use only within a TRANSFORM structure for a JOIN operation and is used as the expression defining the output for a string field. Fields are matched by name and only like-named fields are included in the output.
Example:
FullName := RECORD STRING30 forename; STRING20 surname; IFBLOCK(SELF.surname <> 'Windsor') STRING20 middle; END; END; in1rec := {UNSIGNED1 id,FullName name,UNSIGNED1 age,STRING5 title}; in2rec := {UNSIGNED1 id,FullName name,REAL4 age,BOOLEAN dead}; in1 := DATASET([{1,'Kevin','Halligan','',33,'Mr'}, {2,'Liz','Halligan','',33,'Dr'}, {3,'Elizabeth','Windsor',99,'Queen'}], in1rec); in2 := DATASET([{1,'Kevin','Halligan','',33,false}, {2,'Liz','','Jean',33,false}, {3,'Elizabeth','Windsor',99.1,false}], in2rec); outrec := RECORD UNSIGNED1 id; STRING35 diff1; STRING35 diff2; STRING35 diff3; STRING35 diff4; END; outrec t1(in1 L, in2 R) := TRANSFORM SELF.id := L.id; SELF.diff1 := ROWDIFF(L,R); SELF.diff2 := ROWDIFF(L.name, R.name); SELF.diff3 := ROWDIFF(L, R, COUNT); SELF.diff4 := ROWDIFF(L.name, R.name, COUNT); END; OUTPUT(JOIN(in1, in2, LEFT.id = RIGHT.id, t1(LEFT,RIGHT))); // The result set from this code is: //id diff1 diff2 diff3 diff4 //1 0,0,0,0,0 0,0,0 //2 name.surname,name.middle surname,middle 0,0,1,1,0 0,1,1 //3 age 0,0,0,0,1 0,0,0
See Also: TRANSFORM Structure, JOIN