我在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;
但它一直向我显示错误..任何建议
答案 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个条目。