我有以下表(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时,我只得到一个值,这是最大值。
我怎样才能达到上述结果?
最简单的方法是使用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的最大值,无论它属于哪个antragsummer。所以你总是得到1