繁体   English   中英

从SQL到HSQLDB的IIF函数

[英]IIF Function from SQL to HSQLDB

我在MS Access中有以下SQL语句-

WITH 
    qryAwayMatches AS (SELECT MATCHTEAM.FOOTBALLMATCHID, MATCHTEAM.TEAMID, MATCHTEAM.GAMETYPE, MATCHPROTOCOL.MATCHTEAMID, MATCHPROTOCOL.GOALNUMBER, 
    MATCHPROTOCOL.YELLOWCARDNUMBER, MATCHPROTOCOL.REDCARDNUMBER FROM MATCHTEAM LEFT JOIN MATCHPROTOCOL ON MATCHTEAM.ID = MATCHPROTOCOL.MATCHTEAMID WHERE (((MATCHTEAM.GAMETYPE)='Away'))),
    qryHomeMatches AS (SELECT MATCHTEAM.FOOTBALLMATCHID, MATCHTEAM.TEAMID, MATCHTEAM.GAMETYPE, MATCHPROTOCOL.MATCHTEAMID, MATCHPROTOCOL.GOALNUMBER, 
    MATCHPROTOCOL.YELLOWCARDNUMBER, MATCHPROTOCOL.REDCARDNUMBER FROM MATCHTEAM LEFT JOIN MATCHPROTOCOL ON MATCHTEAM.ID = MATCHPROTOCOL.MATCHTEAMID WHERE (((MATCHTEAM.GAMETYPE)='Home'))),
    qryMatchResult AS (SELECT qryHomeMatches.FootballMatchID, qryHomeMatches.TeamID AS HomeTeamID, 
    qryAwayMatches.TeamID AS AwayTeamID, 
    qryHomeMatches.GoalNumber>qryAwayMatches.GoalNumber AS HomeTeamWin, 
    qryHomeMatches.GoalNumber=qryAwayMatches.GoalNumber AS NoWin, 
    qryHomeMatches.GoalNumber<qryAwayMatches.GoalNumber AS AwayTeamWin 
    FROM qryHomeMatches INNER JOIN qryAwayMatches ON qryHomeMatches.FootballMatchID = qryAwayMatches.FootballMatchID)
    SELECT Round.RoundNumber, Team.Name, **IIf([HomeTeamWin],3,IIf([NoWin],1,0)) AS Points** 
    FROM Round 
    INNER JOIN (Team INNER JOIN (RoundDetail INNER JOIN qryMatchResult ON RoundDetail.FootballMatchID = qryMatchResult.FootballMatchID) ON Team.ID = qryMatchResult.HomeTeamID) ON Round.ID = RoundDetail.RoundID;

当我尝试使用HSQLDB在Java中按按钮执行此语句时,出现以下错误:

java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: IIF

我该如何解决这个问题?

从文档看来,HSQLDB不支持IIF函数,我无法在函数列表中找到它:
http://hsqldb.org/doc/2.0/guide/builtinfunctions-chapt.html#bfc_general_functions


但一个好消息是:HSQLDB支持大小写表达式:
http://hsqldb.org/doc/2.0/guide/dataaccess-chapt.html#dac_query_expression

案件

案例说明

:: = |

:: =案例... []结束

:: =案例... []结束

:: =何时

:: =何时

:: = ELSE

:: = |

:: = [{} ...]

:: = | | | | | | | | | | | |

:: = | 空值

:: =

case表达式由ANSI I SQL标准定义,并且大多数数据库都支持case表达式,而IIF函数是专有和非标准的。

您可以重写:

iif ( condition, value_if_true, value_if_false )

通过这种方式使用case表达式:

CASE WHEN condition THEN value_if_true ELSE value_if_false END

例如:

SELECT CASE WHEN col1>1 THEN 20 ELSE 50 END
FROM ....

代替

SELECT iif(col1>1,20,50)
FROM ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM