我正在尝试使用SQL查询将访问数据库中的数据提取到excel表中。问题是我的访问数据库中的列包含相似的数据,我想将它们合并为一个列。这应该给我每个条目其他列中数据的重复。我对SQL不太满意,但我认为我的基础知识不高。
我拥有的数据库结构:
Date | Product | Hours 1 | Reason 1 | Hours 2 | Reason 2 |
2019 A 3 "xxx" 5 "yyy"
我想要的Excel表:
Date | Product | Hours | Reason |
2019 A 3 "xxx"
2019 A 5 "yyy"
也不确定是否可以,但是很高兴看到每个来源的列
Date | Product | Hours | Reason | Source |
2019 A 3 "xxx" "Hours 1"
2019 A 5 "yyy" "Hours 2"
我尝试了UNION ALL并获得了重复数据,但没有合并到一列中。我要尝试将INSERT INTO插入,但是在如何将每一个都放入同一列中有点迷失了
答案 0 :(得分:0)
尝试一下
SELECT Date, Product, Hours, Reason, Source
FROM (
SELECT Date, Product, Hours1 Hours, Reason1 Reason, "Hours 1" Source
FROM Table
UNION
SELECT Date, Product, Hours2, Reason2, "Hours 2"
FROM Table
)
答案 1 :(得分:0)
您似乎在表中有一个错误的数据结构。我的意思是说它是一个“平坦”的表,其中有多个小时连续记录。通常,它是在多对一情况下执行检查数据任务时使用的PITA。通常会有一个表,其中记录涉及的每个小时分别记录。我了解您可能没有构建它,但是值得为您指出自己的信息。
从根本上讲,一旦您理解了这个不那么理想的结构如何影响您的任务,这个问题就更容易解决。在我看来,这本质上是一个关键问题。 SQL中的PIVOT本质上是在切换行和列。有几种方法可以用代码来透视数据-选择您喜欢的-大多数人实际上都使用PIVOT函数,在这里我倾向于在CTE(常见表经验)和PIVOT之间摇摆不定。一旦了解IMO CTE,就更易于阅读。由于Acess SQL不支持PIVOT或CTE,我们只需要将cte的内容视为相关子查询即可。
SELECT x.*
FROM
(
SELECT
Date,
Product,
Hours,
Reason,
[Hours 1] AS Source
FROM yourTableName
UNION
SELECT
Date,
Product,
Hours,
Reason,
[Hours 2] AS Source
FROM yourTableName
) x