简体   繁体   中英

How to make a case statement based on the method parameter?

I want to make a case statement like in this query :

@Query(nativeQuery = true, value = "select CASE " + 
            " WHEN TYP_0=1 THEN ACC_0" + 
            " WHEN TYP_0=2 THEN ACC_3" + 
            " WHEN TYP_0=3 THEN ACC_2" + 
            " END  FROM  tomx3v6.TOMCTB.GACCCODE  WHERE ACCCOD_0 IN (SELECT [ACCCOD_0] FROM [tomx3v6].[TOMCTB].[ITMMASTER] WHERE YITMOXA_0=?1) AND COA_0='PCG'")
    public String getPCGvalue(String linpurtyp, String code);

But instead of basing the case on the database column TYP_0 I want to make the case statement to be based on the method parameter linpurtyp . How to do that ?

Try this:

@Query(nativeQuery = true, value = "select CASE " + 
            " WHEN ?1=1 THEN ACC_0" + 
            " WHEN ?1=2 THEN ACC_3" + 
            " WHEN ?1=3 THEN ACC_2" + 
            " END  FROM  tomx3v6.TOMCTB.GACCCODE  WHERE ACCCOD_0 IN (SELECT [ACCCOD_0] FROM [tomx3v6].[TOMCTB].[ITMMASTER] WHERE YITMOXA_0=?1) AND COA_0='PCG'")
    public String getPCGvalue(String linpurtyp, String code);

Alternatively, use named parameters

@Query(nativeQuery = true, value = "select CASE " + 
            " WHEN :linpurtyp=1 THEN ACC_0" + 
            " WHEN :linpurtyp=2 THEN ACC_3" + 
            " WHEN :linpurtyp=3 THEN ACC_2" + 
            " END  FROM  tomx3v6.TOMCTB.GACCCODE  WHERE ACCCOD_0 IN (SELECT [ACCCOD_0] FROM [tomx3v6].[TOMCTB].[ITMMASTER] WHERE YITMOXA_0=:linpurtyp) AND COA_0='PCG'")
    public String getPCGvalue(@Param("linpurtyp") String linpurtyp, @Param("code") String code);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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