在MS Access中使用SQL实现多行数据转列(含多迭代场景)
嘿,这个问题其实很好解决,核心就是调整你的分组维度就够了!
解决思路
你之前的SQL只按PartSN分组,所以不同Iter下的同Test数据会被MAX函数合并成一行。现在要保留每个迭代的结果,只需要把Iter也加入到分组条件里,让数据库按PartSN + Iter的组合来分组,这样每个组合下的转列结果就会独立展示了。
修改后的SQL语句
SELECT Table1.PartSN, Table1.Iter, MAX(IIF(Table1.Test = 'Test1', Table1.Data, NULL)) AS Test1, MAX(IIF(Table1.Test = 'Test2', Table1.Data, NULL)) AS Test2 FROM Table1 GROUP BY Table1.PartSN, Table1.Iter
执行这个语句后,就能得到你想要的结果:
PartSN Iter Test1 Test2 Part1 1 20 23 Part1 2 19 24
补充:用PIVOT语法实现(适用于支持PIVOT的数据库,比如SQL Server)
如果你的数据库支持PIVOT操作,也可以用更简洁的写法:
SELECT PartSN, Iter, Test1, Test2 FROM ( SELECT PartSN, Test, Data, Iter FROM Table1 ) AS SourceTable PIVOT ( MAX(Data) FOR Test IN (Test1, Test2) ) AS PivotTable
这个写法逻辑和之前的IIF方法一致,只是用数据库内置的转列语法来实现,可读性会更好一些。
内容的提问来源于stack exchange,提问作者wildfire
相关产品推荐
相关产品推荐

