MS Access中的Transform语句中的WHERE子句

时间:2016-10-25 15:59:59

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

我有以下代码

TRANSFORM Max(VWDRSSTA.DATUM_ZEIT) AS MaxOfDATUM_ZEIT
SELECT VWDRSSTA.ANTRAGSNUMMER, **Max(VWDRSSTA.DUNKEL) AS DUNKEL** ,    Max(VWDRSSTA.VERS_NR_INT) AS Versicherungsnummer
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;

我希望 Max(VWDRSSTA.DUNKEL)AS DUNKEL 设置为Max(VWDRSSTA.DUNKEL)AS DUNKEL,其中VWDRSSTA.SYSTEM = VS但它似乎不起作用。我将如何实现这一目标? VWDRSSTA是表名,DUNKEL和SYSTEM是字段名。我想选择Dunkel的最大值仅作为VS的值。因为它是在crossTab查询中。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

对于Access中的条件选择,您需要使用IIF; IIF模拟SQL CASE语句,Access不支持。

IIF记录在此https://support.office.com/en-us/article/IIf-Function-32436ecf-c629-48a3-9900-647539c764e3

对于您的查询,您可以使用类似

的内容替换现有的DUNKEL选择行
SELECT
IIF(VWDRSSTA.SYSTEM = 'VS', 
    (SELECT (Max(VWDRSSTA.DUNKEL)) as d FROM VWDRSSTA )
    ,null)
    AS DUNKEL
FROM VWDRSSTA

Max(VWDRSSTA.DUNKEL)为VS时,这将选择SYSTEM,如果不是,则将该字段保留为空。如果您想要SYSTEM不是VS时的其他值,只需将null替换为您想要的任何值。注意IIF中的子选择,如果你试图在没有子选择的情况下得到max(),那么就会在评论中提到错误提问者。另请注意,它会从整个表格中选择VWDRSSTA.DUNKEL的最大值,我不确定您想要的是什么。如果您希望VWDRSSTA.ANTRAGSNUMMER的最大值更复杂。

为此,您需要在查询中加入不同的子选择,例如

SELECT 
    vs.ANTRAGSNUMMER, 
    Max(maxget.maxdun) AS DUNKEL,    
    Max(va.VERS_NR_INT) AS Versicherungsnummer
FROM VWDRSSTA as va
INNER JOIN V_NAMES 
    ON (VWDRSSTA.SYSTEM = V_NAMES.SYSTEM_CODE)    
    AND (VWDRSSTA.EREIGNIS = V_NAMES.EREIGNIS)
INNER JOIN 
    (SELECT max(DUNKEL) AS maxdun, ANTRAGSNUMMER 
    FROM VWDRSSTA 
    GROUP BY ANTRAGSNUMMER) AS maxget 
    ON va.ANTRAGSNUMMER = maxget.ANTRAGSNUMMER
GROUP BY VWDRSSTA.ANTRAGSNUMMER
ORDER BY VWDRSSTA.ANTRAGSNUMMER