带有过滤的最大值的交叉表查询

时间:2016-10-26 12:51:32

标签: sql ms-access ms-access-2010

我有以下表格的交叉表查询代码(VWDRSSTA)

SYSTEM  EREIGNIS    DATUM_ZEIT  ANTRAGSNUMMER   DUNKEL
   VS    POL_AN      1.1.2016      123            1
   VS    ANL_SW      1.2.2016      123            0
   ZW    EIN_ED      1.3.2016      123            0
   ZW    AUS_ED      1.4.2016      222            1
   VS    POL_AN      1.5.2016      222            0
   VS    ANL_SW      1.6.2016      222            0

交叉表查询代码

TRANSFORM Max(VWDRSSTA.DATUM_ZEIT) AS MaxOfDATUM_ZEIT
SELECT VWDRSSTA.ANTRAGSNUMMER,
    Max(VWDRSSTA.DUNKEL) AS Dunkel,
    FROM VWDRSSTA
INNER JOIN V_NAMES ON (VWDRSSTA.SYSTEM = V_NAMES.SYSTEM_CODE)
    AND (VWDRSSTA.EREIGNIS = V_NAMES.EREIGNIS)
GROUP BY VWDRSSTA.ANTRAGSNUMMER
ORDER BY VWDRSSTA.ANTRAGSNUMMER
PIVOT V_NAMES.MAPPED_NAME;

其中V_Names是一个包含要映射名称的查找表。

给我结果

ANTRAGSNUMMER   DUNKEL    Eingang       Ausgang    Schwebe   Policierung
   123            1       1.3.2016                 1.2.2016   1.1.2016
   222            1                     1.4.2016   1.6.2016   1.5.2016

由于上面的代码使用Max(VWDRSSTA.DUNKEL) AS Dunkel,因此Antragsnummer的最大值为1,其中我希望DUNKEL值为系统字段中VS的最大值。所以从技术上讲,我希望Antragsnummer 222的第二条记录显示为

222            0                     1.4.2016   1.6.2016   1.5.2016

直到现在我已将Max(VWDRSSTA.DUNKEL) AS Dunkel替换为

DMax("DUNKEL","VWDRSSTA","SYSTEM ='VS'") AS Dunkel

IF(VWDRSSTA.SYSTEM = 'VS', (
            SELECT (Max(VWDRSSTA.DUNKEL)) AS d
            FROM VWDRSSTA
            ), NULL) AS Dunkel

但是它们都没有按预期工作。对于后者,我得到以下错误

  

子查询中不允许使用多级GROUP BY子句

当我使用DMax时,我只得到1个值,即最大值。

如何达到上述效果?

1 个答案:

答案 0 :(得分:0)

最简单的方法是使用DMAX(),但这会影响较大表的性能。

考虑这个查询:

SELECT 
    outer_VWDRSSTA.antragsnummer,
    DMax("dunkel","VWDRSSTA","[system]='VS' AND antragsnummer =" & [outer_VWDRSSTA].[antragsnummer]) AS mdunkel
FROM VWDRSSTA AS outer_VWDRSSTA
GROUP BY outer_VWDRSSTA.antragsnummer;

将输出:

+---------------+---------+
| antragsnummer | mdunkel |
+---------------+---------+
|           123 |       1 |
|           222 |       0 |
+---------------+---------+
你有:

DMax("DUNKEL","VWDRSSTA","SYSTEM ='VS'") AS Dunkel

这将获得VS的最大值,无论它属于哪个Antragsnummer。因此,你总是1

相关问题