2

この mysql クエリを作成し、JOOQ クエリに変換しようとしましたが、成功しませんでした。これは mysql クエリです

SELECT `P`.`phone_number`, `A`.`emp_no`,   
SUM(CASE WHEN VCG.vid IN (
SELECT gv.vid FROM `grvas` gv JOIN gprs gr ON gr.id=gv.grid 
WHERE gr.id=G.id AND gv.stdate < '2011-08-15'  AND gv.enddate > '2011-09-14') 
THEN VCG.amount END) AS allow,
... etc...

このクエリを JOOQ クエリに変換するにはどうすればよいですか?
ありがとう、

4

2 に答える 2

4

これ:

SUM(
  CASE 
  WHEN VCG.vid IN (
    SELECT gv.vid 
    FROM `grvas` gv 
      JOIN gprs gr ON gr.id=gv.grid 
    WHERE gr.id=G.id 
      AND gv.stdate < '2011-08-15'  
      AND gv.enddate > '2011-09-14'
  ) 
  THEN VCG.amount 
  END
) AS allow

翻訳すると次のようになります。

import static org.jooq.impl.DSL.*;

// And then
sum(
  decode()
  .when(VCG.VID.in(
      select(GRVAS.VID)
      .from(GRVAS)
        .join(GPRS).on(GPRS.ID.eq(GRVAS.GRID))
      .where(GPRS.ID.eq(G.ID))
      .and(GRVAS.STDATE.lt(Date.valueOf("2011-08-15")))
      .and(GRVAS.ENDDATE.gt(Date.valueOf("2011-09-14")))
  )), VCG.AMOUNT)
).as("allow")

上記の例では、IN述語のサブクエリでテーブルのエイリアシングを省略して、単純化しています。もちろん、これらすべてのテーブルに別名を付けることもできます。

于 2013-01-31T11:15:37.857 に答える
0

上記のSQLをJOOQに変換する適切な方法が見つかりませんでしたが、使用しました

String sql="SELECT `P`.`phone_number`, `A`.`emp_no`,   
             SUM(CASE WHEN VCG.vid IN (
             SELECT gv.vid FROM `grvas` gv JOIN gprs gr ON gr.id=gv.grid 
             WHERE gr.id=G.id AND gv.stdate < '2011-08-15'  AND gv.enddate > '2011-09-14') 
             THEN VCG.amount END) AS allow,
             ... etc... " ;
Result<Record> res = f.fetch(sql);  

これはうまくいきます ありがとう

于 2013-01-31T09:59:17.580 に答える