可能是一些非常微不足道的事情,但我还没有找到我在互联网上寻找的答案,我得到了语法错误。我想要/需要做的是在我的where子句中提供一个特殊情况,其中doctype是1.如果是,则需要匹配临时表的子选择中的claimID。如果doctype不是1,那么我们只需要继续并忽略select。
import reactivemongo.api.MongoDriver
import reactivemongo.api.collections.bson.BSONCollection
import reactivemongo.bson.BSONDocument
import scala.concurrent.Await
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration._
class RMongoTest(){
def run = {
val dbHosts: List[String] = List("localhost")
val dbName = "TestDB"
val driver = new MongoDriver
val connection = driver.connection(dbHosts)
val db = connection("TestDB")
val collection :BSONCollection = db("TestCollection")
val futureInsert = collection.insert(BSONDocument("Moo" -> "Over"))
Await.result(futureInsert, 10.seconds) //Not really a great pattern...
val futureResult = collection.find(BSONDocument()).one
val result = Await.result(futureResult, 10.seconds)
println(result.get.get("Moo"))
}
}
我已经看过一些if语句,但我似乎没有得到这个工作,并且还没有找到任何在线的东西,这显示了我想做的案例陈述。这甚至可能吗?
答案 0 :(得分:3)
您不需要案例陈述,您可以这样做:
AND (@DocType <> 1 or c.ClaimID in (SELECT TNE.ClaimID FROM TNE))
答案 1 :(得分:3)
CASE
表达式(不是语句)返回单个值。 SQL Server支持bit数据类型。 (有效值为0,1,'TRUE'和'FALSE'。)有一个boolean数据类型(值为TRUE,FALSE和UNKNOWN),但是你无法牢牢抓住它们。您的CASE
表达式尝试返回布尔值,给出或取不匹配的括号,在此上下文中不支持。
你可以使用这样的东西,虽然吕克的答案更适用于所陈述的问题:
and
case
when @DocType = 1 and c.ClaimId in ( select TNE.ClaimId from TNE ) then 1
when @DocType = 2 and ... then 1
...
else 0
end = 1
请注意,CASE
会返回一个您必须比较的值(= 1
)。