美好的一天,
最初我有一个像这样工作的表:
表1
PartSN Test Data
Part1 Test1 20
Part1 Test2 23
我可以使用MAX IIF将测试转换为列,如
Select
Table1.PartSN,
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
数据将是
PartSN Test1 Test2
Part1 20 23
现在我的问题是我的测试包含多次迭代
PartSN Test Data Iter
Part1 Test1 20 1
Part1 Test2 23 1
Part1 Test1 19 2
Part1 Test2 24 2
使用我以前的代码,包括IIF中的iter只允许我获得一行,但我需要所有迭代存在,如下所示:
PartSN Iter Test1 Test2
Part1 1 20 23
Part1 2 19 24
感谢您提供任何帮助或建议或链接到可能的解决方案。
答案 0 :(得分:1)
只需将其加入select
和group by
:
select t1.PartSN, t1.iter,
max(iif(t1.Test = 'Test1', t1.Data, NULL)) As Test1,
max(iif(t1.Test = 'Test2', t1.Data, NULL)) As Test2
from Table1 as t1
group by t1.PartSN, t1.iter;
答案 1 :(得分:0)
考虑MS Access'独特的交叉表查询(在其他DBMS中不可用),它可以避免逐行条件聚合表达式,并自动化所有 Test 值的支点:
TRANSFORM Max(t.Data) As MaxData
SELECT t.PartSN, t.Iter
FROM mytable t
GROUP BY t.PartSN, t.Iter
PIVOT t.Test;
-- PartSN Iter Test1 Test2
-- Part1 1 20 23
-- Part1 2 19 24