我有以下代码
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查询中。我怎样才能做到这一点?
答案 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