这样的条件判断该如何设计???

问题描述

根据一个orderno在表中可以查到这个orderno的结果集放到dataset。现在需要返回这个orderno的状态。条件是:全是P就返回done,如有有一个其他的状态就返回对应的状态。状态值status有4种值R,A,E,P.分别代表的意思是R--readlyA--doingE--errorP--done.例如:表中查询的到结果集是ordernostatus1111P1111P返回done.ordernostatus1112P1112E返回error.foreach(datarowdrinds.table[0].rows){if(dr["status"].tostring()=="P"){return"done";}if(dr["status"].tostring()=="E"){return"error";}}这样写很不好啊,如果遇到结果集是ordernostatus1112P1112E1112P那就会返回done了,其实应该是error.

解决方案

解决方案二:
这么简单的逻辑还要问问问,很善意的告诉楼主,你不适合干这行,逻辑思维能力太差.
解决方案三:
你应该遍历值为E,遇到就中断遍历(循环)并返回E
解决方案四:
没找到E就是done,你的语句返回的最后一行的状态值status
解决方案五:
我表示看完之后大脑一片混乱
解决方案六:
好像你的表设计和你的代码是矛盾。。。我再瞧瞧
解决方案七:
foreach(datarowdrinds.table[0].rows){if(dr["status"].tostring()=="P"){return"done";}if(dr["status"].tostring()=="E"){return"error";}elseif(dr["status"].tostring()=="R"){return"readly";}elseif(dr["status"].tostring()=="A"){return"doing";}}
解决方案八:
不想用那么多IFELSE能不能用面向对象的思维解决啊
解决方案九:
很简单,设一变量flag=0,遍历DataTable的每一行,根据status的值做加法。R:3A:2E:1P:0stirng[]rs={"done","error","doing","ready"};然后returnflagStr[flag];就可以了。比如flag为0,说明全部是P,则取"done"。
解决方案十:
foreach(datarowdrinds.table[0].rows){}这个遍历是一行一行遍历的,而你的代码中明显是在数据库中的一行中进行比较而实际上你的需求是多行间进行比较
解决方案十一:
if(dr["status"].tostring()=="E"){return"error";}elseif(dr["status"].tostring()=="A"){return"doing";}else(dr["status"].tostring()=="p"){return"done";}这样是可以解决。可不可以不这样写。也不要用swtchcase.
解决方案十二:
stirng[]rs={"done","error","doing","ready"};stringflagStr="PEAR";intflag=0;foreach(....){flag+=flagStr.IndexOf(dr["status"].tostring();}returnflagStr[flag];就这样好了。
解决方案十三:
我算看明白了你这个需求一行代码都不用写一条sql语句即可搞定你就是想按orderno进行分组然后判断orderno对应的状态吧。。。应该用到groupbycase什么的我sql语句不太好高手帮忙给写个吧一条sql绝对能解决问题!
解决方案十四:
引用8楼的回复:

很简单,设一变量flag=0,遍历DataTable的每一行,根据status的值做加法。R:3A:2E:1P:0stirng[]rs={"done","error","doing","ready"};然后returnflagStr[flag];就可以了。比如flag为0,说明全部是P,则取"done"。

按你说的做加法。如果这样就不对了。ordernostatus1112P1112E1112A的到结果flag=3。其实应该是E。这里还有个优先级的意思。如果结果集里有E,不管其他有没。就是ERROR。其次就是A,R,P
解决方案十五:
引用12楼的回复:

我算看明白了你这个需求一行代码都不用写一条sql语句即可搞定你就是想按orderno进行分组然后判断orderno对应的状态吧。。。应该用到groupbycase什么的我sql语句不太好高手帮忙给写个吧一条sql绝对能解决问题!

不用分组查询,就更具当前ORDERNO来查出结果集,当然这个结果集存在多行记录。会有不同的状态。目的是返回这个订单的状态。只要有一个E的订单就要返回ERROR
解决方案:
引用14楼的回复:

引用12楼的回复:我算看明白了你这个需求一行代码都不用写一条sql语句即可搞定你就是想按orderno进行分组然后判断orderno对应的状态吧。。。应该用到groupbycase什么的我sql语句不太好高手帮忙给写个吧一条sql绝对能解决问题!不用分组查询,就更具当前ORDERNO来查出结果集,当然这个结果集存在多行记录。会有不同的状态。……

好吧用代码实现那楼上的方法可行只是优先级的的事情再改改呗思路很清晰了
解决方案:
stirng[]rs={"done","error","doing","ready"};stringflagStr="PEAR";intflag=0;foreach(....){flag+=flagStr.IndexOf(dr["status"].tostring();if(if(dr["status"].ToString()=="E"))flag+=100;}if(flag>=100)return"error";returnflagStr[flag];
解决方案:
100可能不够,那就用10000好了。
解决方案:
selectorderno,status=min(casewhenexists(select1fromtbwhereorderno=a.ordernoandstatus='E')then'E'elsestatusend)fromtbagroupbyorderno直接查出来可以吧
解决方案:
引用16楼的回复:

stirng[]rs={"done","error","doing","ready"};stringflagStr="PEAR";intflag=0;foreach(....){flag+=flagStr.IndexOf(dr["status"].tostring();if(if(dr["status"].ToString()=="E"))flag+=100;……

兄弟,思维很强,我希望能用面向对象的方式来解决,不希望有ifelse.你这个办法还是很好的。
解决方案:
引用18楼的回复:

selectorderno,status=min(casewhenexists(select1fromtbwhereorderno=a.ordernoandstatus='E')then'E'elsestatusend)fromtbagroupbyorderno直接查出来可以吧

家里没数据库,改天上班了调试看看。

时间: 2024-10-22 01:56:24

这样的条件判断该如何设计???的相关文章

CSS3条件判断:@supports条件判断规则

文章简介:众所周知,不同的浏览器(不管是现代浏览器还是老版本的IE浏览器)对Web页面的解析都是不一样,为了让Web页面在这些浏览器下渲染达到基本一致的情况,给用户更好的体验,我们必须为他们写不同的样式代码. CSS3条件判断,听起来"不明觉厉",如果你对CSS稍为熟悉一点的话,你会发现CSS中的"@media"就是条件判断之一.是的,在CSS3的条件判断规范文档中包含了两个部分,其一是"@media"规则,主要用来"根据媒体属性区分样

dos if 条件判断_DOS/BAT

1.判断驱动器.文件或文件夹是否存在,用 if exist 语句: 2.判断某两个字符串是否相等,用 if "字符串1"=="字符串2" 语句: 3.判断某两个数值是否相等,用 if 数值1 equ 数值2 语句: 4.判断某个变量是否已经被赋值,用 if defined str 语句: if语句的完整格式是这样的:if 条件表达式 (语句1) else (语句2),它的含义是:如果条件表达式成立,那么,就执行语句1,否则,将执行语句2. 对于以上四种情形,可以分别

《C++语言入门经典》一第3章 重要的逻辑工具——判断与循环 3.1 条件判断

第3章 重要的逻辑工具--判断与循环 视频讲解:90分钟 一个大的问题需要分成若干个小的问题才能够得到解决.C++语言提供了分支语句与循环语句.当需要一个条件影响到问题的结论时,我们需要判断语句:当需要执行若干个相同的指令时,我们需要循环语句. 通过学习本章,读者可以达到以下学习目的:掌握3种形式的判断语句了解条件运算符与判断语句的转换掌握switch分支语句掌握判断语句的嵌套了解3种循环语句掌握各种循环的区别了解循环的跳转掌握循环的嵌套 3.1 条件判断 计算机的主要功能是提供计算功能,但在计

&#106avascript里的条件判断

条件     JavaScript 是一种可以在浏览器中运行的脚本语言,是一种弱语言(相对于C,C#,JAVA而言),只要是计算机语言就会使用到条件判断式,而JavaScript作为一种"弱"语言,它的条件判断常常令人困惑不解,特别是有其它强语言编程经历的人来说,更是不可理喻!高手和无惑的人别取笑,我自己也曾经有一段时间郁闷过.先写一个例子吧: var s = "meizz";if (s && s==true){    alert("Is

javascript里的条件判断

javascript|条件     JavaScript 是一种可以在浏览器中运行的脚本语言,是一种弱语言(相对于C,C#,JAVA而言),只要是计算机语言就会使用到条件判断式,而JavaScript作为一种"弱"语言,它的条件判断常常令人困惑不解,特别是有其它强语言编程经历的人来说,更是不可理喻!高手和无惑的人别取笑,我自己也曾经有一段时间郁闷过.先写一个例子吧: var s = "meizz";if (s && s==true){    aler

mysql数据库条件判断查询语句的常见写法说明

大家都知道只有的了mysql 5后才出现了存储过程,这些用法,那么我们要在sql 中用if else while这些,就得用存过程或函数来实例了. mysql> DELIMITER // mysql> CREATE FUNCTION myFunction (quantity INT(10)) RETURNS INT(10)     -> BEGIN     ->     ->     WHILE quantity MOD 12 > 0 DO     ->    

JavaScript中的条件判断语句使用详解

这篇文章主要介绍了JavaScript中的条件判断语句使用详解,是JS入门学习中的基础知识,需要的朋友可以参考下 在写一个程序,可能有一种情况,当你需要采用一个路径出给定两个路径.所以,需要使用条件语句,让程序来做出正确的决策和执行正确的行动. JavaScript支持其用于执行根据不同的条件不同的操作条件语句.在这里,我们将解释if..else语句. JavaScript支持if..else语句的形式如下: if 语句 if...else 语句 if...else if... 语句. if 语

详解Python中的条件判断语句

  这篇文章主要介绍了Python中的条件判断语句,是Python入门中的基础知识,需要的朋友可以参考下 一个else语句可以使用if语句结合起来.如果在if语句中的条件表达式解析为0或false值,那么else语句包含代码执行. else语句是可选的声明,并if语句下面最多只有一个else语句. 语法: if ... else语句的语法是: ? 1 2 3 4 if expression: statement(s) else: statement(s) 例子: ? 1 2 3 4 5 6 7

解读Ruby当中的条件判断语句

  这篇文章主要介绍了详细解读Ruby当中的条件判断语句,if.else等逻辑判断语句是各门编程语言的基础,需要的朋友可以参考下 Ruby的提供有条件结构,常见在现代编程语言中.在这里,我们将解释Ruby所有条件语句和修饰符 Ruby if...else 语句: 语法: ? 1 2 3 4 5 6 7 if conditional [then] code... [elsif conditional [then] code...]... [else code...] end if 表达式用于条件执