如何在Scala Slick查询中进行条件排序

时间:2019-02-01 05:43:28

标签: scala slick-2.0

当前的光滑查询是:

(for {
      t <- userType if t.user_type === uType
      h <- hand if h.work_item_uid === workItemId &&
                   h.user_uid === userId &&
                   h.user_type_id === t.user_type_id &&
                   h.expires_utc > cutoff
      enc <- tbl if enc.work_item_uid === workItemId &&
                    enc.encounter_uid === h.encounter_uid
    } yield (enc,h.expires_utc,h.sequence))
    .sortBy(_._3)
    .list match {
      case Nil => None
      case nonEmpty =>
        nonEmpty.unzip3 match {
          case (encs,tstamps,_) =>
            Some(ChartQueue((tstamps.map(_.getTime).min - System.currentTimeMillis).toInt, encs))
        }
    }

tbl中,有一个字段encounter_type,它具有字符串值,例如“住院病人”,“门诊病人”等。和

在上面的查询中,数据集按顺序排序。我想基于encounter_type实现条件排序。

也就是说,如果遇到类型在列表中有某些字符串,我希望它们在顶部。

所以我尝试了以下操作:

val encType= List("Inpatient","Observation","Outpatient in a Bed")

并尝试应用类似的查询

priority <- enc if enc.inSet(encType) 1 else 2

但是我无法按优先级对它进行排序。

我正在寻找类似在原始SQL中构建的内容:

select encounter_dos, patient_fin, encounter_type, 
if(encounter_type in ('Inpatient','Observation','Outpatient in a Bed'),1,2) as priority 
from cleardb.tbl_encounter 
order by priority, encounter_dos;

0 个答案:

没有答案