在scalikejdbc中寻找嵌套groupBy中的帮助吗?

时间:2019-03-08 19:06:39

标签: scala scalikejdbc

我正在使用Scala 2.12,并已通过build.sbt下载了所需的库。

我的数据库输出格式如下。 enter image description here

基本上,就像每个评估日期和帐簿一样,可以有多个货币数据。

我在书本上(主要是按分组)将列出基于货币的Pnl数据列表。

只是粗略的表述:

{ Bookid: 1234,
  BookName: EQUITY,
  PnlBreakdown: [currency: cad, actual_pnl_local: 100, actual_pnl_cde: 100], [currency: usd, actual_pnl_local: 100, actual_pnl_cde: 130]
}

基本上。密钥将是book,值将是pnl数据列表。

我有一个如下定义的案例类:

case class PnlData(valuation_date: Option[String], currency: Option[String],pnl_status: Option[String],actual_pnl_local: Option[String] ,actual_pnl_cde: Option[String], actual_pnl_local_me_adj: Option[String] ,actual_pnl_cde_me_adj: Option[String] ) {
  override def toString():String= {
    s"valuation_date=$valuation_date,currency=$currency,pnl_status=$pnl_status,actual_pnl_local=$actual_pnl_local,actual_pnl_cde=$actual_pnl_cde,actual_pnl_local_me_adj=$actual_pnl_local_me_adj,actual_pnl_cde_me_adj=$actual_pnl_cde_me_adj"
  }
}

case class BookLevelDaily(book_id: Option[String], book: Option[String], pnlBreakdown: List[SaPnlData]){
  override def toString():String= {
    s"book_id=$book_id,book=$book,pnl=$pnlBreakdown"
  }
}

基本上,我的最终对象是BookLevelDaily类型。

如何将数据库输出(上方)转换为BookLevelDaily对象?

我可以将整个结果转换为列表,但是进一步我应该如何做groupBy?

val list: List[BookLevelDaily] =
      sql"""
           |SELECT QUERY TO GET ABOVE RESULTSET
        """.stripMargin.map(rs =>
        BookLevelDaily(
          valuation_date = rs.stringOpt("valuation_date"),
          book_id = rs.stringOpt("book_id"),
          book =  rs.stringOpt("book"),
          currency=  rs.stringOpt("currency"),
          pnl_status=  rs.stringOpt("pnl_status"),
          actual_pnl_local=  rs.stringOpt("actual_pnl_local"),
          actual_pnl_cde=  rs.stringOpt("actual_pnl_cde"),
          actual_pnl_local_me_adj= rs.stringOpt("actual_pnl_local_me_adj"),
          actual_pnl_cde_me_adj= rs.stringOpt("actual_pnl_cde_me_adj")
        )
      ).list().apply()

首先,上面的不是BookLevelDaily类型。那么如何迭代或分组以分离Pnl级数据并将其映射到键(书)。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,那似乎是一对多的关系(一个:book_level_daily,许多:pnl_breakdown)。如果是这样,请检查以下文档。

http://scalikejdbc.org/documentation/one-to-x.html