sql - 使用 SQL 的表列结构/变化分析
问题描述
我每天下载一个excel文件。它包含销售结果信息。但有时格式(列)会发生变化。例如,
Column <As-is> A B C D <Changed> D C E F
所以,我想用 SQL 来报告这个变化。会是这样。
- A 列已被删除。
- B列已被删除。
- C 列已从第三位置移至第二位置。
- D 列已从第 4 列移至第 1 列。
- E 列已添加到第 3 列。
- F 列已添加到第 4 列。
我要分析的不是行(数据),而只是列(结构)。我试图通过将 SQL 连接到 Excel 文件来使用 SQL 语言操作 Excel 文件中的数据来做到这一点。
我制作了一个两行的excel文件:第一是前一列结构,第二是当前列结构。两列结构可能是表格的两行,我需要找到一种方法来获取我想要制作的分析报告。
解决方案
这太长了,无法在评论中解释。首先,我看不到你想做的事情的效用。数据库的输入数据应该更稳定。因此,看起来你真正的问题是不同的——你还没有解释它。
其次,结果不明确。如果你想从 ABC 转到 CBF,那一组变化是“正确的”?
- 删除 Column1 中的 A
- 将 C 添加到 Column1
- 从 Column3 中删除 C
- 将 F 添加到 Column3
或者:
- A 列已删除
- C 列移至 Column1
- F 列添加到第 3 列
综上所述,您可以使用以下方法比较两列information_schema
:
select ordinal_position,
max(case when table_name = 'old' then column_name end) as old_name,
max(case when table_name = 'new' then column_name end) as new_name
from information_schema.columns
where table_name in ('old', 'new')
group by ordinal_position;
我看不到如何简单地将其转换为您想要的结构。但如果这是一个真正的问题,我确实有一个建议是调查 Levenshtein 距离。您需要调整算法以支持字符串而不是字母,但这可能是您想要完成的。
推荐阅读
- opengl - 在 pyBullet 中模拟失真的相机
- pdf - 使用 Ghostscript 将扫描的 PDF 转换为纯文本
- python - 重复的查询行
- jenkins - 如何使用其 API 在 Jenkins 中获取构建历史记录?
- python - Python selenium 在模态中找不到元素
- java - 字符串返回值上的 compareTo java 方法
- azure-ad-b2c - B2C 自定义内容 - 将声明值输出为隐藏字段
- python - Tweepy twitter bot 如何防止在一段时间内重复推文
- node.js - GitHub 操作 CI 检查 npm 测试保持不间断运行
- html - 如果 Iphone 水平转动,HTML5 视频将不会显示