使用microsoft查询分组

时间:2016-10-22 23:13:54

标签: excel ms-access microsoft-query

我在excel中有这样的表

ID | NAME | JOB     | PRICE
1  | alex | Java    | 100
1  | alex | C++     | 100
1  | alex | PHP     | 500
2  | road | Android | 400
2  | road | Ruby    | 400
3  | brit | Java    | 200
3  | brit | PHP     | 500
3  | brit | C       | 100
3  | brit | DotNet  | 300

我需要以下格式输出

ID | NAME | JOB                   | PRICE
1  | alex | Java,C++,PHP          | 700
2  | road | Android,Ruby          | 800
3  | brit | Java, PHP, C, DotNet  | 1100

所以我使用Microsoft Query使用以下查询生成此输出

Select ID, NAME , GROUP_CONCAT(JOB) ,Sum(PRICE) from Table Group By ID;

但它一直向我显示错误..任何建议

2 个答案:

答案 0 :(得分:0)

可能与SQL最接近的是交叉表查询,它可以在Jet / ACE SQL方言中找到。 Jet / ACE是一组Windows .dll文件,用于MS Access数据库和Excel电子表格的ODBC / OLEDB连接。请注意Jet / ACE的最大限制为255列。

具体来说,下面计算按字母顺序排列的作业的运行次数(取最大重复值),然后从该来源转向:

TRANSFORM Max(main.Job) As MaxOfJob
SELECT main.ID, main.[Name], Sum(main.PRICE) AS SumOfPrice
FROM (
   SELECT i.*, (SELECT Count(*) FROM [Sheet1$] sub
                WHERE sub.ID = i.ID AND sub.JOB <= i.JOB) As RunCount
   FROM [Sheet1$] i
) AS main
GROUP BY main.ID, main.[Name]
PIVOT main.RunCount;

-- ID   Name    SumOfPrice  1        2       3      4
-- 1    alex    700         C++      Java    PHP    
-- 2    road    800         Android  Ruby       
-- 3    brit    1100        C        DotNet  Java   PHP

获得完整的结果集后,将所有编号的列单元格连接到带有Excel CONCATENATE()的逗号分隔的 JOB 列中,或者使用VBA循环遍历每个列单元格。

答案 1 :(得分:0)

您希望表格显示的方式包括“组合字段”,这在数据库设计中是不受欢迎的。您的初始设计是正确的,因为每种语言在表格中占用1个条目。