如何解决SQL:将重复行中的不同列数据转换为 MS Access 中的列
所以我正在处理来自有点混乱的 csv 文件的数据。很多重复的行,最后两个值构成了该列中应该是单独的标题和数据,如下所示:
ID | 姓名 | 日期 | field4 | field5 |
---|---|---|---|---|
1 | 约翰 | 21-03-23 | 味道 | 草莓 |
1 | 约翰 | 21-03-23 | 位置 | 厨房 |
2 | 简 | 21-04-18 | 味道 | 石灰 |
2 | 简 | 21-04-18 | 位置 | 地下室 |
到目前为止,我只使用 INSTER INTO 语句清理了 Access 中的数据,因为所有具有相同主键的重复行都将被忽略。像这样的查询:
query GetUser($id: ID!) {
getUser(id: $id){
id
project
}
}
,它返回如下内容:
ID | 姓名 | 日期 | field4 | field5 |
---|---|---|---|---|
1 | 约翰 | 21-03-23 | 味道 | 草莓 |
2 | 简 | 21-04-18 | 味道 | 石灰 |
但是,现在我需要将 field4 和 field5 中的所有不同值转换为新列,这样数据就不会丢失。像这样:
ID | 姓名 | 日期 | 味道 | 位置 |
---|---|---|---|---|
1 | 约翰 | 21-03-23 | 草莓 | 厨房 |
2 | 简 | 21-04-18 | 石灰 | 地下室 |
如何在 sql 中完成此操作?
解决方法
使用条件聚合:
select id,name,date,max(iif(field4 = "Flavour",field5,null)) as flavour,max(iif(field4 = "Location",null)) as Location
from t
group by id,date;
这假设您知道结果集中所需的列。如果没有,您需要以某种方式生成查询字符串以进行更动态的查询。
,您可以使用自联接:
SELECT D.ID,D.[Name],D.[Date],D.Field5 AS Flavour,D1.Field5 AS Location
FROM tblData AS D1 INNER JOIN tblData AS D
ON D1.[Date] = D.[Date]
AND D1.[Name] = D.[Name]
AND D1.ID = D.ID
WHERE
D.Field4="Flavour"
AND D1.Field4="Location";
请注意,Name
和 Date
是 Access 中的保留字,因此我将它们放在方括号中 2 - 在深入了解数据库设计之前,您现在应该重命名这些字段。
问候,
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。