使用MS Access上的SQL将行数据转换为列

时间:2018-05-16 05:41:55

标签: sql ms-access

美好的一天,

最初我有一个像这样工作的表:

表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

感谢您提供任何帮助或建议或链接到可能的解决方案。

2 个答案:

答案 0 :(得分:1)

只需将其加入selectgroup 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