2016-05-14 49 views
0

我在MS Access下面的SQL语句 -IIF功能在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 

我该如何解决这个问题?

回答

2

似乎从HSQLDB没有按文件; T公司的支持IIF的功能,我可以;吨发现它的功能的列表:
http://hsqldb.org/doc/2.0/guide/builtinfunctions-chapt.html#bfc_general_functions


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

CASE

case specification

::= |

::= CASE ... [ ] END

::= CASE ... [ ] END

::= WHEN THEN

::= WHEN THEN

::= ELSE

::= |

::= [ { }... ]

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

::= | NULL

::=

该案例表达式由ANSII SQL标准定义,大部分数据库支持,而IIF函数是专有和非标准的。以这种方式使用的情况下表达

iif (condition, value_if_true, value_if_false) 



可以重写

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 ... 
+0

Ť要求你解释这个伟大的解释! – vshcherbinin