我试图构建一个报告,通过比较两个表及其值,以以下格式显示不匹配的字段。
预期输出:
用户ID | 用户名 | 年份 | 错误字段 | 表A值 | 表B值 |
---|---|---|---|---|---|
USER01 | 罗伊 | 二〇一七年 | 城市不匹配 | 伦敦 | 巴黎 |
用户02 | 彼得 | 二零零五年 | 用户名不匹配 | 彼得 | 罗马 |
用户02 | 彼得 | 二零零五年 | 当然不匹配 | 科学 | 人文学科 |
这是部分工作代码。它正确显示错误字段。但我还想显示TableAValue和TableBValue中的值。
SELECT * FROM
(
SELECT a.userid, a.username, a.year, CASE column1
WHEN 1 THEN IIF((a.username != b.username), 'Username not a match', NULL)
WHEN 2 THEN IIF((a.city != b.city), 'City not a match', NULL)
WHEN 3 THEN IIF((a.course != b.course), 'Course not a match', NULL)
WHEN 4 THEN IIF((a.speciality != b.speciality), 'Speciality not a match', NULL)
END [Error Field]
FROM tableA a INNER JOIN tableB on (a.userid = b.userid and a.year = b.year)
cross join (values (1),(2),(3),(4)) n
) q
WHERE [Error Field] IS NOT NULL
以上代码输出:
用户ID | 用户名 | 年份 | 错误字段 |
---|---|---|---|
USER01 | 罗伊 | 二〇一七年 | 城市不匹配 |
用户02 | 彼得 | 二零零五年 | 用户名不匹配 |
用户02 | 彼得 | 二零零五年 | 当然不匹配 |
如何显示表A和表B中的值,如上面预期的输出表所示?
2条答案
按热度按时间1aaf6o9v1#
考虑到您的意见,这是一种新方法:
sg3maiej2#
您可以使用concat
||
操作符来实现:参考:https://www.sqlite.org/lang_expr.html