SQL根据条件执行不同的语句
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL根据条件执行不同的语句相关的知识,希望对你有一定的参考价值。
有这样的一个SOL语句
select w.WorkloadID,p.ProcessName,F.FlowName,D.District_Name,w.AreaCode,W.SCadastralNumber,W.ECadastralNumber,W.WE_Name,W.W_Name,W.GroupWork,W.STime,W.Days,W.ETime,F.FlowName,F.DayWorks,W.Days,W.Days*F.DayWorks as DayWorks,convert(decimal(18,2),W.GroupWork-(W.Days*F.DayWorks)) as DeductDayW,convert(decimal(18,2),W.GroupWork-(W.Days*F.DayWorks)*P.P_Ratio,2) as Yield
from Workload W left join District D on W.District_ID=D.District_Num
Left join Process p on w.ProcessID=p.ProcessID
left join Flow F on w.FlowID=F.FlowID
我想显示的条件是如果F.FlowID=‘-1’那么convert(decimal(18,2),W.GroupWork-(W.Days*F.DayWorks)*P.P_Ratio,2) as Yield执行这个,如果不等于-1那么就执行这个
convert(decimal(18,2),W.GroupWork-(W.Days*F.DayWorks)*F.F_Ratio,2) as Yield
求大神啊
p.ProcessName,
F.FlowName,
D.District_Name,
w.AreaCode,
W.SCadastralNumber,
W.ECadastralNumber,
W.WE_Name,
W.W_Name,
W.GroupWork,
W.STime,
W.Days,
W.ETime,
F.FlowName,
F.DayWorks,
W.Days,
W.Days*F.DayWorks as DayWorks,
convert(decimal(18,2),W.GroupWork-(W.Days*F.DayWorks)) as DeductDayW,
case when F.FlowID=\'-1\' then convert(decimal(18,2),W.GroupWork-(W.Days*F.DayWorks)*P.P_Ratio,2) else convert(decimal(18,2),W.GroupWork-(W.Days*F.DayWorks)*F.F_Ratio,2) end as Yield
from Workload W left join District D on W.District_ID=D.District_Num
Left join Process p on w.ProcessID=p.ProcessID
left join Flow F on w.FlowID=F.FlowID
看看是这个意思吗?
追问对,就是这个意思,谢谢了
参考技术A case when F.FlowID=‘-1’then convert(decimal(18,2),W.GroupWork-(W.Days*F.DayWorks)*P.P_Ratio,2) else
when F.FlowID<>‘-1’
convert(decimal(18,2),W.GroupWork-(W.Days*F.DayWorks)*F.F_Ratio,2) end as Yield
根据条件执行不同的函数而不使用if语句
是否有更好的方法/编码风格在不使用if语句的情况下在不同条件下执行不同的函数?
我在JavaScript中使用以下方式进行编码:(例如,不同条件下的函数可能使用API中的不同fetch方法)
if(answer == 'a'){
foo()
if(answer == 'b'){
bar()
if(answer == 'c'){
bar_2()
if(answer == 'd'){
foo_3()
我曾想过使用eval()
,但这是一个好方法吗?例如,创建对象由作为条件的键和作为属性的函数名组成。
conditions:{
a: 'foo',
b: 'bar',
c: 'foo_2',
d: 'bar_2',
}
像eval(this.conditions[a])
一样运行它
但我也听说使用eval
很难进行测试。
是的,您可以使用该函数构建条件对象并调用它们:
function foo(){...}
function bar(){...}
var conditions : {
'a': foo,
'b': bar,
}
conditions[answer]()
注意:如果您不知道自己在做什么,请尽量不要使用eval
它有安全隐患
您使用键指向功能标识符。你最好用key来指向函数:
conditions:{
a: () => {
// body of foo
},
b: () => {
// body of bar
},
c: () => {
// body of foo_2
},
d: () => {
// body of bar_2
}
}
conditions[ your_key ]();
您可以定义对函数的引用或在每个条件下执行
const doSomething = (args) => {
// do something
}
const doSomethingElse = (args) => {
// do something else
}
const conditions = {
a: doSomething,
b: doSomethingElse
};
// and then
const result = conditions[answer](params);
甚至是功能参考列表
const conditions = {
a: [
doSomething,
],
b: [
doSomething,
doSomethingElse
]
};
// and then
const results = conditions[ answer ].map(method => method());
你可以创建这样的函数:
this['some answer'] = function() {...}
然后称之为
this[answer]()
以上是关于SQL根据条件执行不同的语句的主要内容,如果未能解决你的问题,请参考以下文章
mysql中sql语句查询的同时根据条件将数据插入到另一个表的做法?