0

我在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;

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

4

2 回答 2

0

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

于 2016-10-23T04:40:47.687 回答
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将所有编号的列单元格连接到逗号分隔的JOBCONCATENATE()列中,或使用 VBA 循环遍历每个列单元格。

于 2016-10-23T01:49:18.513 回答