在Excel SQL查询中堆积列数据

时间:2019-05-29 20:41:59

标签: sql excel

我正在尝试使用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插入,但是在如何将每一个都放入同一列中有点迷失了

2 个答案:

答案 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)

  1. 您似乎在表中有一个错误的数据结构。我的意思是说它是一个“平坦”的表,其中有多个小时连续记录。通常,它是在多对一情况下执行检查数据任务时使用的PITA。通常会有一个表,其中记录涉及的每个小时分别记录。我了解您可能没有构建它,但是值得为您指出自己的信息。

  2. 从根本上讲,一旦您理解了这个不那么理想的结构如何影响您的任务,这个问题就更容易解决。在我看来,这本质上是一个关键问题。 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