你能在Case语句中做一个子选择吗?

时间:2015-07-29 16:30:10

标签: tsql case

可能是一些非常微不足道的事情,但我还没有找到我在互联网上寻找的答案,我得到了语法错误。我想要/需要做的是在我的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语句,但我似乎没有得到这个工作,并且还没有找到任何在线的东西,这显示了我想做的案例陈述。这甚至可能吗?

2 个答案:

答案 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)。