SQL查询Excel电子表格并将多行数据合并为一个

时间:2013-09-12 03:47:11

标签: sql excel

我正在开发一个项目,我必须查询平面Excel电子表格并创建结果,就像它是一个真正的数据库。所有数据都在一个工作表中,它看起来像这样:

Name     City        State   Country     Favorites
John     Austin      TX      US          Hot Dogs
John     Austin      TX      US          Baseball
Steve    Orlando     FL      US          Hot Dogs
Steve    Orlando     FL      US          Baseball
Steve    Orlando     FL      US          Apple Pie

使用查询我需要返回一个看起来像这样的表。

Name     City       State    Country     Hot Dogs     Baseball    Apple Pie
John     Austin     TX       US          Yes          Yes         No
Steve    Orlando    FL       US          Yes          Yes         Yes

关键是我正在使用Excel电子表格执行此操作。

所以我创建了一个如下所示的查询:

Select
[Name],[City],[State],[Country],
IIF([Favorites] = "Hot Dogs", 'Yes') as [Hot Dogs],
IIF([Favorites] = "Baseball", 'Yes') as [Baseball],
IIF([Favorites] = "Apple Pie", 'Yes') as [Apple Pie]
From
[Sheet1$]
Group By
[Name],[City],[State],[Country],
IIF([Favorites] = "Hot Dogs", 'Yes'),
IIF([Favorites] = "Apple Pie", 'Yes')

但是查询的数据结果如下所示:(格式化道歉)

Name    City    State   Country    Hot Dogs Baseball    Apple Pie   
John    Austin  TX  US                  Yes 
John    Austin  TX  US     Yes      
Steve   Orlando FL  US                              Yes
Steve   Orlando FL  US              Yes 
Steve   Orlando FL  US     Yes      

如何将每个用户的所有结果合并为一行?在Excel中查询时,Group By似乎没有帮助或工作。无论我是否包含Group By部分,结果都是相同的,我被迫包含select语句中的所有列以避免错误:

“您尝试执行不包含指定表达式的查询...作为聚合函数的一部分。

如果这是在SQL DB中我可以使它工作,但我不想在Excel中尝试这样做。

任何建议都会被欣赏!

感谢。

1 个答案:

答案 0 :(得分:0)

更改GROUP BY子句,如下所示:

Select
[Name],[City],[State],[Country],
IIF([Favorites] = "Hot Dogs", 'Yes', 'No') as [Hot Dogs],
IIF([Favorites] = "Baseball", 'Yes', 'No') as [Baseball],
IIF([Favorites] = "Apple Pie", 'Yes', 'No') as [Apple Pie]
From
[Sheet1$]
Group By
[Name],[City],[State],[Country]

另外,我认为您需要在IIF语句中添加, 'No',就像我做的那样