我有一个表,其中有几个字段,我需要对这些字段进行数据质量检查。
数据质量检查被定义为第二表中的规则。
数据表:
| 识别码|名称1|名称2|拉链1|拉链2|
| - -|- -|- -|- -|- -|
| 第001章|若翰|若翰|一百二十三|一百二十三|
| 002年|萨拉|萨拉|二百三十四人|二百三十四人|
| 003年|比尔|威廉|九九九|一一一|
| 004年|丽莎|丽莎|八百八十八|三百三十三个|
| 005年|马田|马田|三百四十五|三百四十五|
| 006年|玛格丽特|玛格丽特|四百五十六人|四百五十六人|
| 007年|奥斯卡|奥斯卡|六百七十八|六百七十八|
| 小008|彼得|彼得|七百八十九|七百八十九|
规则表:
| 识别码|字段向左|字段右对齐|比较操作|
| - -|- -|- -|- -|
| 第001章|名称1|名称2|相等|
| 二|拉链1|拉链2|相等|
所以规则基本上是说:名称1 =名称2且邮政编码1 =邮政编码2
预期的输出是不符合规则的记录。它应该为每个违反规则的记录生成一行(请参见记录003,名称和邮编都不一致-〉,因此记录003的结果中有两行)。
输出:
| 规则|识别码|字段向左|字段右对齐|
| - -|- -|- -|- -|
| 第001章|002年|萨拉|萨拉|
| 第001章|003年|比尔|威廉|
| 二|003年|九九九|一一一|
| 二|004年|八百八十八|三百三十三个|
3条答案
按热度按时间k75qkfdt1#
下面是我实现
输出:
最终输出:
3qpi33ja2#
@hbit我不确定没有显式循环的完整解决方案。我已经使用交叉连接为每个记录添加一个规则,创建一个笛卡尔结果集。您可以看到eval为false的记录,您应该能够根据规则列提取所有正确的false记录。
rxztt3cl3#
这是我的第三次实现尝试。这一次使用动态sql,并且只循环遍历所有规则以创建适当的sql case字符串,然后将其一次性应用于主数据集。唯一需要注意的是如何显示使用此方法失败两次的相同记录。我确信有一种方法