我有一个程序接收一个名为的变量@FL_FINALIZADA.
如果它为null或false,我想限制我的select只显示包含空DT_FINALIZACAO值的行.否则,我想显示包含非空DT_FINALIZACAO值的行.
像这样的东西:
SELECT
*
FROM
MyTable
WHERE
...
AND
(
OPE.DT_FINALIZACAO = (
CASE
WHEN (@FL_FINALIZADA <> 1)
THEN NULL
END
) OR
OPE.DT_FINALIZACAO IS NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我收到消息:
CASE规范中的结果表达式都不 是NULL.
我怎样才能做到这一点?
提前致谢.
我想根据该实例外部的信息有条件地创建对象实例的副本.副本中的大多数信息将与原始信息相同,但某些信息需要更改.这些信息是在actor之间传递的,所以我需要对象是不可变的,以避免奇怪的并发相关行为.以下玩具代码是我想要帮助的一个简单示例.
如果我有以下代码:
case class Container(condition:String,amount:Int,ID:Long)
Run Code Online (Sandbox Code Playgroud)
我可以做以下事情:
val a = new Container("Hello",10,1234567890)
println("a = " + a)
val b = a.copy(amount = -5)
println("b = " + b)
println("amount in b is " + b.amount)
Run Code Online (Sandbox Code Playgroud)
而输出是
a = Container(Hello,10,1234567890)
b = Container(Hello,-5,1234567890)
amount in b is -5
Run Code Online (Sandbox Code Playgroud)
我还可以有条件地创建对象的副本,执行以下操作:
import scala.Math._
val max = 3
val c = if(abs(b.amount) >= max) b.copy(amount = max,condition="Goodbye") else if(abs(b.amount) < max) b.copy(amount = abs(b.amount))
println("c = " + c)
Run Code Online (Sandbox Code Playgroud)
如果我将b对象中的数量设置为-5,则输出为
c = Container(Goodbye,3,1234567890)
Run Code Online (Sandbox Code Playgroud)
如果我将b对象中的数量设置为-2,则输出为
c …Run Code Online (Sandbox Code Playgroud) 所以基本上给出了以下代码.
何时action = 2;和mode = 1将i被设置为2?
我正在研究同事代码,它是这样编写的,但我认为中断只会跳过if并继续其余部分case 2.所以基本上if语句是没有意义的.
switch(action){
case 1: i = 1; break;
case 2: if(mode == 1)
{
break;
}
i = 2;
break;
case 3: i = 3; break;
Run Code Online (Sandbox Code Playgroud)
我把它重写为:
case 2: if(mode != 1)
i = 2;
break;
Run Code Online (Sandbox Code Playgroud)
但它不是唯一的地方,有些更复杂.如果我要重构它,我需要一些我正确的信息.
如果使用带有子查询的select case语句将else语句改为单个查询,我需要更改以下过程...
if((select COUNT(*) from pseb.dbo.meterattributedetails where meterid=@meterid)=0)
select @emf=EMF from pseb.dbo.METERMASTER where MeterID=@meterid
else if((select COUNT(*) from pseb.dbo.meterattributedetails where meterid=@meterid and dateadd(day,1,@fromdate)<DateTime)>0)
select top 1 @emf=oldvalue from pseb.dbo.meterattributedetails where MeterID=@meterid and dateadd(day,1,@fromdate)<datetime order by DateTime
else
select top 1 @emf=newvalue from pseb.dbo.meterattributedetails where meterid=@meterid and DateTime<@fromdate order by DateTime desc
Run Code Online (Sandbox Code Playgroud)
meterattribute表结构如下:
AttributeID AttributeName Oldvalue newvalue DateTime meterid
1 EMF 2.00000 4.00000 2012-07-05 4756
1 EMF 4.00000 6.00000 2012-07-10 4756
1 EMF 6.00000 8.00000 2012-07-15 4756
1 EMF 8.00000 10.00000 …Run Code Online (Sandbox Code Playgroud) 我的示例代码.
在where语句中的case语句中,当我等于变量时,我得到以下错误:
ORA-00905缺少关键字
我不明白我哪里出错了.
我甚至尝试将完整的case语句等同于变量,它没有提供所需的输出.
谁能帮我?
SELECT JOB_NAME,
HOURS,
COMMITTEE,
REPORT,
DIRECTOR,
(CASE
WHEN L.ACTION IN ('110', '10') AND
L.APPROVED = 'Y' AND
(:LV_ACTN = '1' OR :LV_ACTN = '4') THEN
L.APPRV_JUSTIFY
WHEN L.ACTION IN ('20', '130') AND
L.FLAG = 'R' AND (:LV_ACTN = '2' OR :LV_ACTN = '4') THEN
L.CANCL_JUSTIFY
WHEN L.ACTION IN ('30', '120') AND
L.APPROVED = 'Y' AND
(:LV_ACTN = '3' OR :LV_ACTN = '4') THEN
L.POSTPONE_JUSTIFY
ELSE
'NO ACTION'
END) AS EXPLANATION,
L.ID,
MANAGER,
l.year
FROM …Run Code Online (Sandbox Code Playgroud) 我有一个场景,我需要在where子句中使用多个值,如果传递给查询的参数是99999,否则我只使用param本身.我使用"IN"作为where子句的一部分,但我得到以下错误"关键字'CASE'附近的语法不正确".任何一个提供替代不正确的查询,将获得我需要的结果?
DECLARE @IPD_NEWS_TYPE_PARAM decimal (18,0)
SET @IPD_NEWS_TYPE_PARAM = 99999
SELECT
n.id,
n.headline,
n.news_type_id
FROM news n
WHERE n.news_type_id IN
CASE WHEN @IPD_NEWS_TYPE_PARAM = 99999 THEN (1,2,3,4,5)
ELSE
(@IPD_NEWS_TYPE_PARAM)
END
Run Code Online (Sandbox Code Playgroud) 在这个sql CASE语句中:
CASE WHEN col1 = 'X' then 'A'
CASE when col2 = 'Y' then 'B'
else 'C' as result ...
Run Code Online (Sandbox Code Playgroud)
如果col1 = X,col2 = Y,输出是'A'还是'B'?即CASE语句是if还是else-if?
我在案例"删除"时遇到语法错误.我一直试图解决它,但我无法弄明白.谁能告诉我如何解决它?谢谢
该代码适用于在线商店购物车
switch($action)
{
case "add":
if (isset($_SESSION['cart'][$id]))
$_SESSION['cart'][$id]++;
else
$_SESSION['cart'][$id]=1;
break;
case "remove":
if (isset($_SESSION['cart'][$id]))
(
$_SESSION['cart'][$id]--; (ERROR HERE)
if ($_SESSION['cart'][$id]==0)
unset($_SESSION['cart'][$id]);
)
break;
case "empty":
unset($_SESSION['cart']);
break;
}
Run Code Online (Sandbox Code Playgroud) 好的标题很难让我表达,所以可以编辑
我的问题是我可以用更短的方式写下面的查询
在所有情况下,何时相同
SQL server 2014
这里是查询
update
tblCrawlUrls
set
cl_LastCrawlDate = case
when Len(@cl_CrawlSource) > 2 then SYSUTCDATETIME()
else cl_LastCrawlDate
end ,
cl_TotalCrawlTimes = case
when Len(@cl_CrawlSource) > 2 then @cl_TotalCrawlTimes
else cl_TotalCrawlTimes
end ,
cl_Ignored_By_Containing_Word = case
when Len(@cl_CrawlSource) > 2 then @cl_Ignored_By_Containing_Word
else cl_Ignored_By_Containing_Word
end ,
cl_PageProcessed = case
when Len(@cl_CrawlSource) > 2 then 0
else cl_PageProcessed
end ,
cl_CertainlyNotProductPage = case
when Len(@cl_CrawlSource) > 2 then @cl_CertainlyNotProductPage
else cl_CertainlyNotProductPage
end ,
cl_CrawlSource = case
when Len(@cl_CrawlSource) …Run Code Online (Sandbox Code Playgroud) 这有什么问题?是的,我可以做一个if else声明,但我想用case语句做.
在我的控制器中
query_limit = case current_user
when nil
return 5
when is_admin?
return 200
when has_role?('registered')
return 20
else
return 5
end
NoMethodError (undefined method `is_admin?' for #<V1::MyController:123123123>):
Run Code Online (Sandbox Code Playgroud)
puts query_limit 当我这样做时,#总是ELSE:
query_limit = case current_user
when nil
return 5
when current_user.is_admin?
return 200
when current_user.has_role?('registered')
return 20
else
return 5
end
Run Code Online (Sandbox Code Playgroud)
模型用户
class User
def is_admin?
self.has_role?('administrator')
end
def has_role?(the_role)
self.roles.any? {|role| role.slug == the_role}
end
end
Run Code Online (Sandbox Code Playgroud)