查询在Excel输出中写入额外的行

时间:2015-10-08 16:26:13

标签: sql excel microsoft-query

我试图在MS Excel中完成一些看似简单的事情。我想使用单个SQL查询 - 所以我可以将其传递给其他人进行复制和粘贴 - 尽管我知道以下其他方法也可以实现。表1看起来像这样:

ID        value          value_type
1         minneapolis    city_name
2         cincinnati     city_name

我希望SQL查询返回"爆炸"这两行的版本:

ID        attr_name      attr_value
1         value          minneapolis
1         value_type     city_name
2         value          cincinnati
2         value_type     city_name

还有更多我需要做的事情,但这个概念是问题的核心。我尝试了一个SELECT语句,但似乎无法让它从一个创建两行,当我尝试使用UNION ALL时,我遇到了语法错误。

在Microsoft Query中,如何构造SQL语句以从一行中的现有值创建两行?

更新

感谢目前为止的帮助。首先,作为参考,这是在Microsoft Query中重新创建表的默认语句:

SELECT
    `Sheet3$`.ID,
    `Sheet3$`.name,
    `Sheet3$`.name_type
FROM `path\testconvert.xlsx`.`Sheet3$` `Sheet3$`

所以,在@ lad2025的带领下,我有:

SELECT
   ID = `Sheet3$`.ID
   ,attr_name  = 'value'
   ,attr_value = `Sheet3$`.value
FROM `path\testconvert.xlsx`.`Sheet3$` `Sheet3$`
UNION ALL
SELECT 
    ID = `Sheet3$`.ID
    ,attr_name  = 'value_type'
    ,attr_value = `Sheet3$`.value_type
FROM `path\testconvert.xlsx`.`Sheet3$` `Sheet3$`

结果是这个错误Too few parameters. Expected 4.

2 个答案:

答案 0 :(得分:2)

<强> LiveDemo

CREATE TABLE #mytable(
   ID         INTEGER  NOT NULL PRIMARY KEY 
  ,value      VARCHAR(11) NOT NULL
  ,value_type VARCHAR(9) NOT NULL
);
INSERT INTO #mytable(ID,value,value_type) VALUES (1,'minneapolis','city_name');
INSERT INTO #mytable(ID,value,value_type) VALUES (2,'cincinnati','city_name');


SELECT 
    ID
   ,[attr_name]  = 'value'
   ,[attr_value] = value
FROM #mytable
UNION ALL
SELECT 
    ID
   ,[attr_name]  = 'value_type'
   ,[attr_value] = value_type
FROM #mytable
ORDER BY id;

答案 1 :(得分:0)

好的,在回到原始声明并根据@ lad2025的建议从那里开始工作之后,我想出了这个声明,它在我原来的问题中实现了我所寻找的目标:

SELECT 
    ID,
    'name' AS [attr_name],
    name AS [attr_value] 
FROM `path\testconvert.xlsx`.`Sheet3$` `Sheet3$`
UNION ALL
SELECT 
    ID,
    'name_type',
    name_type
FROM `path\testconvert.xlsx`.`Sheet3$` `Sheet3$`
ORDER BY ID;

其中一个主要问题是新列名仅在第一个SELECT语句中定义。另外,括号还可以,但不是@ lad2025最初使用它们的方式。

Microsoft Query非常挑剔。