我有这个虚拟的临时表,看起来像这样
ID Sum Indicator Month Year
1 10 Ind1 3 2016
1 20 Ind2 3 2016
2 15 Ind1 3 2016
2 19 Ind3 3 2016
. . . . .
. . . . .
50 5 Ind1 3 2016
50 5 Ind2 3 2016
50 5 Ind3 3 2016
我想得到的结果如下:
ID Ind1 Ind2 Ind3 Month Year
1 10 20 null 3 2016
2 15 null 19 3 2016
50 5 5 5 3 2016
我尝试过:
select a.ID,b.sum as Ind1,c.sum as Ind2,d.sum as Ind3
from (
(
dummytable a
left join dummytable b
on a.ID=b.ID
)
left join dummytable c
on a.ID=c.ID
)
left join dummytable d
on a.ID=d.ID
where b.Indicator=Ind1 and c.Indicator=Ind2 and d.Indicator=Ind3
此位捕获所有具有Ind1,2,3值的ID,因此从我的示例中仅显示所需结果的最后一行。我知道,因为Access不支持完全连接,所以应该使用union来捕获其余的组合。但是,我继续使用union我得到一条错误消息(不支持连接表达式)或重复相同结果的值。有什么建议吗?
答案 0 :(得分:3)
如上所述,请考虑MS Access的唯一数据透视查询crosstab,它是Access UI创建功能区查询选项卡中列出的对象。在设计视图中,您可以选择两种GROUP BY
类型的列(最后为Values
聚合类型除外)
将创建生成的SQL(注意嵌入的聚合查询):
TRANSFORM Sum(dummytable.Sum) AS SumOfSum
SELECT dummytable.ID, dummytable.Month, dummytable.Year
FROM dummytable
GROUP BY dummytable.ID, dummytable.Month, dummytable.Year
PIVOT dummytable.Indicator;
结果
ID Month Year Ind1 Ind2 Ind3
1 3 2016 10 20
2 3 2016 15 19
50 3 2016 5 5 5
对于在Access外部工作的通用RDMS数据透视查询,只需使用条件聚合。请注意其他SQL方言,IIF()
函数必须替换为CASE/WHEN
或IF/THEN
:
SELECT dummytable.ID, dummytable.Month, dummytable.Year,
SUM(IIF(dummytable.Indicator = 'Ind1', [Sum], NULL)) As Ind1,
SUM(IIF(dummytable.Indicator = 'Ind2', [Sum], NULL)) As Ind2,
SUM(IIF(dummytable.Indicator = 'Ind3', [Sum], NULL)) As Ind3
FROM dummytable
GROUP BY dummytable.ID, dummytable.Month, dummytable.Year;
答案 1 :(得分:-1)
要创建多值字段交叉表查询,必须为要计算的每个值创建单独的交叉表查询。然后,您可以使用选择查询来连接这些交叉表查询以显示所需的结果。